2016-05-10 51 views
1

功能我有一個具有我所定義的,像這樣自定義「接觸」爲Laravel模式

protected $touches = ['parent']; 

我希望做類似的是什麼東西touches陣列在我的數據庫,並在子模型一對多的關係在這兩個問題描述:

但是稍有不同,我希望在父模型上的布爾列在子模型中發生更改時進行更新。這適用於觸摸,但我無法弄清楚如何使用自定義屬性來代替。

我在父模型無濟於事試過這樣:

public static function boot() 
{ 
    parent::boot(); 

    static::updating(function ($table) { 
     $table->is_finished = true; 
    }); 
} 

回答

1

根據this thread看來,updating()事件僅在事件觸發該模型是「髒」,即有這樣的過場改變了價值,因此需要更新。所以,如果父模型上的數據沒有改變,那可能是你的代碼永遠不會被執行。我的猜測是,儘管家長的時間戳被觸及,但它可以被認爲是髒的屬性列表中免除。

你可能不是僅僅將此代碼添加到子模型:

// this is whatever property points to the parent model 
public function parent() { 
    return $this->belongsTo('App\Parent'); 
} 

// this overrides the update() method in the Eloquent\Model class 
public function update($attributes = Array, $options = Array) { 

    parent::update($attributes, $options); 

    $this->parent->is_finished = true; 
    $this->parent->save(); 
} 

沒有測試過這一點,但不明白爲什麼它不應該工作。