我读到了Eloquent events,但没有看到任何attach
,detach
或sync
事件。
如何实施这些Eloquent事件?
答案 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'];
}