猿问

如何在没有枢轴模型的情况下在 Laravel 中存储多对多关系?

我正在尝试创建多对多关系我有 2 个主表和 1 个数据透视表


user


id : 1

name : lily 

event


id: 1

event_name: Waterpark Waterday

-------

id: 2

event_name :Theme Park Adventure

event_user


id : 1

event_id : 2

user_id : 1

-------------

id :2

event_id :1

user_id :1

表用户和事件都已创建。仅当用户想要加入事件时创建数据透视表或关系。因此,当用户单击“应用”按钮时,它只会存储event_id并且user_id我想创建类似的东西。但我有问题,我不太确定如何保存它。它确实尝试过,但我不断收到错误。


湖上湖
浏览 144回答 2
2回答

千巷猫影

你可以使用attach和detach方法。您还可以使用该sync方法来构造多对多关联。该sync方法接受要放置在中间表上的 ID 数组。任何不在给定数组中的 ID 都将从中间表中删除。因此,此操作完成后,中间表中将只存在给定数组中的 ID:$user->events()->sync([1,2]);数组中1,2是事件 id。笔记因为sync, attach您应该在模型中定义关系。用户模型class User extends Model{    public function events()    {        return $this->belongsToMany('App\Event','event_user','user_id','event_id');    }}事件模型class Event extends Model{    public function users()    {        return $this->belongsToMany('App\User','event_user','event_id','user_id');    }}根据您的代码。$user = User::find(Auth::user()->id);$user->events()->sync([$request->event_id]);

翻翻过去那场雪

我的可选答案:(因为当您有大数据时,附加比同步更快)//get current synced id$attachedIds = $user->events()->pluck('id');//check if there is a new id selected//if its a single id$new_id = array_diff([$request->event_id], $attachedIds);//if its already an array$new_id = array_diff($request->input('event_id', []), $attachedIds);$user->events()->attach($new_id);
随时随地看视频慕课网APP
我要回答