2014-03-19 47 views
3

嗯,我认为标题解释了它的大部分。让我们马上进入!laravel /雄辩mutators /访问者在一个数据透视表

空白模型:

class Blank extends Eloquent 
{ 

    protected $table = 'blanks'; 

    protected $softDelete = true; 

    protected $hidden = array(); 

    /** 
    * Get associated jobs. 
    * 
    * @return mixed 
    */ 
    public function jobs() 
    { 
     return $this->belongsToMany('Job')->withPivot('status', 'inventory', 'sizes', 'mill', 'po', 'location', 'ordered_at', 'expected_at', 'note')->withTimestamps(); 
    } 

    /** 
    * Blanks sizes accessor 
    * 
    * @return object 
    */ 
    public function getSizesAttribute($value) 
    { 
     return json_decode($this->pivot->sizes); 
    } 

    /** 
    * Blanks sizes mutator 
    * 
    * @return void 
    */ 
    public function setSizesAttribute($value) 
    { 
     $this->pivot->attributes['sizes'] = json_encode($this->pivot->sizes); 
    } 

} 

工作型号:

class Job extends Eloquent 
{ 

    protected $table = 'jobs'; 

    protected $softDelete = true; 

    protected $hidden = array(); 

    /** 
    * Get associated blank. 
    * 
    * @return mixed 
    */ 
    public function blanks() 
    { 
     return $this->belongsToMany('Blank')->withPivot('status', 'inventory', 'sizes', 'mill', 'po', 'location', 'ordered_at', 'expected_at', 'note')->withTimestamps(); 
    } 

    /** 
    * Blanks sizes accessor 
    * 
    * @return object 
    */ 
    public function getSizesAttribute($value) 
    { 
     return json_decode($this->pivot->sizes); 
    } 

    /** 
    * Blanks sizes mutator 
    * 
    * @return void 
    */ 
    public function setSizesAttribute($value) 
    { 
     $this->pivot->attributes['sizes'] = json_encode($this->pivot->sizes); 
    } 
} 

附加代码:

$job->blanks()->attach($blank->id,[ 
    'status'  => Input::get('status'), 
    'inventory' => Input::get('inventory'), 
    //'sizes'  => $sizes, 
    'mill'  => Input::get('mill'), 
    'po'   => Input::get('po'), 
    'location' => Input::get('location'), 
    'ordered_at' => Carbon::parse(Input::get('ordered_at'))->format('Y-m-d H:i:s'), 
    'expected_at' => Carbon::parse(Input::get('expected_at'))->format('Y-m-d H:i:s'), 
    'note'  => Input::get('note'), 
]); 

的突变不会被调用所有..任何想法?

+0

哪个增变器你期待被称为...什么时候? – duellsy

+0

我会假定作业模型上的mutator'setSizesAttribute'将被调用,因为我设置'尺寸'。它目前在代码中被注释掉了,所以你可以看到它被调用的地方。 – michaelcurry

+4

只是在一个数组中,只有当您直接从模型实例中调用该值时,才会调用增变器。如果你想在枢轴上使用增变器,你需要明确地为枢轴增加一个新模型。 – duellsy

回答

2

好像是不可能通过::attach()的方法来做到这一点。

也许你想用 'Defining A Custom Pivot Model'

public function newPivot(Model $parent, array $attributes, $table, $exists) 
{ 
    return new YourCustomPivot($parent, $attributes, $table, $exists); 
} 

所以,你可以改变者定义自己的支点类:

class BlankJobPivot extends Eloquent 
{ 
    // ... 

    /** 
    * Blanks sizes accessor 
    * 
    * @return object 
    */ 
    public function getSizesAttribute($value) 
    { 
     return json_decode($value); 
    } 

    /** 
    * Blanks sizes mutator 
    * 
    * @return void 
    */ 
    public function setSizesAttribute($value) 
    { 
     $this->attributes['sizes'] = json_encode($value); 
     return $value; // return for multiple assignment statement: $arr = $pivot->sizes = array(12, 23, 34); 
    } 
} 

而且比你可以用干将:

$blank->jobs[$i]->pivot->sizes; // - ::getSizesAttribute() will called (I hope :)) 

而且也许你会发现通过setSizesAttribute mutator找到save/attach的方法。

好运。