在Laravel中调用attach或detach时,如何获取`pivot table`模型来触发保存/保存的模型事件?

时间:2014-01-17 13:03:23

标签: php laravel laravel-4 eloquent

在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
    }
}

2 个答案:

答案 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