如何让“数据透视表”模型在 Laravel 中调用附加或分离时触发保存/保存的模型事件



在Laravel 4中,如何让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
    }
}

您可以向团队模型添加$touches

class Team extends Eloquent 
{
    protected $touches = array('TeamUser');
    // Relationship
    public function users() 
    {
        return $this->belongsToMany('User');
    }    
}

这将更新"团队用户updated_at"字段。我认为这也将击中TeamUser模型中的save()方法。

如果这不起作用,您可以在 Team save() 方法中触发自己的事件,并在某处侦听此事件。

Event::fire('team.updated', array($team));

在新版本的Laraval 5.8中,数据透视表会触发引导事件。查看发行说明:https://laravel.com/docs/5.8/releases#pivot

最新更新