Laravel Eloquent事件(附加,分离和同步)

时间:2016-09-06 13:55:40

标签: laravel laravel-4 laravel-5 laravel-5.2 laravel-5.1

我读到了Eloquent events,但没有看到任何attachdetachsync事件。

如何实施这些Eloquent事件?

3 个答案:

答案 0 :(得分:0)

更新

从Laravel 5.8枢轴模型开始,事件像普通模型一样被调度。

https://laravel.com/docs/5.8/releases#laravel-5.8

您只需要将using(PivotModel::class)添加到您的关系中,事件将在PivotModel上起作用。

    class User extends Model 
    {
        public function roles()
        {
            return $this->hasMany(App\Role::class)->using(UserRolePivot::class);
        }
    }

和枢轴模型

use Illuminate\Database\Eloquent\Relations\MorphPivot;

class UserRolePivot extends Pivot
{
      protected $dispatchesEvents = [
    'created' => RoleAttached::class,
    'deleted' => RoleDeleted::class,
];
}

Attach($id)将分派Created和Creation

Detach($id)将分派“删除和删除”,

Sync($ids)也将调度所需的事件[创建,创建,删除,已删除]

只有dispatch()且没有id,直到现在才调度任何事件。

答案 1 :(得分:-1)

泰勒拒绝将此添加到laravel核心,即使很多人需要这些事件,请参阅laravel PR关于https://github.com/laravel/framework/pull/14988

但这是一个解决问题的方案: https://github.com/fico7489/laravel-pivot

一个软件包已经过充分测试并且有很好的文档记录,因此许多人开始使用它。

答案 2 :(得分:-2)

附加/分离/同步时,您正在创建相关模型的对象。例如:

class User extends Model 
{
...
    public function roles()
    {
        return $this->hasMany(App\Role::class)
    }
...
}

通话:

$user->roles()->attach(1);

在数据透视表中创建记录。

使用user_id和role_id创建UserRole模型并使用其雄辩的事件。

class UserRole extends Model
{
    protected $fillable = ['user_id', 'role_id'];
}