在Laravel 4中,当调用attach或detach时,如何让pivot table
模型触发保存/保存的模型事件?
看起来下面的数据透视表'TeamUser'实际上并不需要附加/分离方法才能工作,所以我猜想我从不会调用代表数据透视表的模型。因此事件永远不会被触发。
要问另一种方式:
当我致电User::with('Team')->find(1)->teams()->attach(1);
时如何让TeamUser
触发自己的事件。请注意,上述附件工作正常,所有记录都在数据库中更新。
用户
class User extends Eloquent
{
// Relationship
public function teams()
{
return $this->belongsToMany('Team');
}
}
团队
class Team extends Eloquent
{
// Relationship
public function users()
{
return $this->belongsToMany('User');
}
}
团队用户 - TeamUser
表/数据透视表
class TeamUser extends Eloquent
{
public function save(array $options = array())
{
// do cool stuff when relationship is saved via
// attach/detach
}
}
答案 0 :(得分:5)
您可以向团队模型添加$touches
。
class Team extends Eloquent
{
protected $touches = array('TeamUser');
// Relationship
public function users()
{
return $this->belongsToMany('User');
}
}
这将更新TeamUser updated_at
字段。我认为这也会击中TeamUser模型中的save()
方法。
如果这不起作用,您可以在团队save()
方法中触发自己的事件并在某处听取此事件。
Event::fire('team.updated', array($team));
答案 1 :(得分:0)
使用新版本的Laraval 5.8,数据透视表触发启动事件。查看发行说明:https://laravel.com/docs/5.8/releases#pivot