我注意到如果模型中没有变化,模型将不会调用更新或更新的事件。我想它会将getOriginal
与getDirty
进行比较。
但是,当我只更新模型的关系时,例如附加新类别,因为此操作位于更新的事件中,它将永远不会被触发。
在这种特定情况下,在更新事件期间会删除类别,在更新事件期间会附加新类别。但只有在我更改模型中的至少一个值时才会触发它。
我错过了什么吗?
这种情况在4.1中没有发生,现在正在发生4.2,作曲家今天更新了。
更新
以下是我的产品型号启动中的updating
和updated
事件:
public static function boot()
{
parent::boot();
static::updating(function($model)
{
$model->author_id = 1;//Auth::user()->id;
$history = new ProductHistory($model->getOriginal());
$model->history()->save($history);
$model->languages()->update(array(Product::$historyKey => $history->id));
$model->currencies()->update(array(Product::$historyKey => $history->id));
$model->paymentTypes()->update(array(Product::$historyKey => $history->id));
}
static::updated(function($model)
{
if(Input::has('languages')) $model->languages()->attach(Input::get('languages'));
if(Input::has('currencies')) $model->currencies()->attach(Input::get('currencies'));
if(Input::has('payment_types')) $model->paymentTypes()->attach(Input::get('payment_types'));
}
}
updating
中的BaseModel
事件:
static::updating(function($model)
{
if(property_exists(get_class($model), 'rules'))
{
if(!$model->validate()) return false;
}
});
这在4.2中不再起作用,因为当模型没有变化时,忽略更新和更新的事件。我的修复仅使用saving
和saved
个事件,在这些事件中,我可以通过检查getOriginal()
是否存在来确定是否正在更新或创建模型不
答案 0 :(得分:0)
触发父模型update
的最简单方法是在子模型中添加$touches
属性,例如,如果要更新ProductHistory
模型,是另一个模型的孩子,然后在ProductHistory
模型中添加以下属性:
// Add this in ProductHistory model
protected $touches = array('Product');
现在,每当您更新ProductHistory
时,它都会更新其中的updated_at
字段,并在此情况下更新Product
模型,因此updated_at
字段将被更新,更新的事件也将触发,更新父模型更新时的updated_at
属性是有意义的。
检查Laravel
网站中的Touching Parent Timestamps。