2014-03-19 80 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的方法。

好運。