上述示例中,sync方法将会移除原有的关联记录,并添加新的关联记录。 在Laravel 中,还可以使用wherePivot方法来对 pivot 表中的记录进行筛选: 代码语言:txt 复制 $user = User::find(1); $role = $user->roles()->wherePivot('column1', 'value')->first(); 上述示例
为了sync 多个模型以及自定义数据透视表,您需要:$user->roles()->sync([ 1 => ['expires' => true], 2 => ['expires' => false], ... ]); IE。sync([ related_id => ['pivot_field' => value], ... ]); 编辑回复评论:$speakers = (array) Input::get('speakers'); // related ids ...
如果你想要你的 pivot 表自动包含created_at 和updated_at 时间戳,在关联关系定义时使用 withTimestamps 方法:return $this->belongsToMany('App\Role')->withTimestamps(); 自定义 pivot 属性名上面已经提到,我们可以通过在模型上使用 pivot 属性来访问中间表字段,此外,我们还可以在应用中自定义这个属性名称来...
->orderBy('wechat_multi_post_post.index') ->withPivot('index'); } 获取中间表字段 利用模型中的pivot属性访问,但是默认只有两个模型的key,如果需要额外的字段需要在定义时用withPivot声明需要的字段名 根据中间表排序 在定义关联的时候可以用orderBy排序 更新中间表数据 sync 同步更新中间表 根据id更新 $thi...
$user->roles()->syncWithPivotValues([1, 2, 3], ['active' => true]);如果你不想移除现有的 ID,可以使用 syncWithoutDetaching 方法:$user->roles()->syncWithoutDetaching([1, 2, 3]);切换关联多对多关联也提供了 toggle 方法用于「切换」给定 ID 数组的附加状态。 如果给定的 ID 已被附加在中间...
return $this->belongsToMany(Role::class)->withPivot('active', 'created_by');如果你想让中间表自动维护 created_at 和updated_at 时间戳,那么在定义关联时附加上 withTimestamps 方法即可:return $this->belongsToMany(Role::class)->withTimestamps(); 注意 注意:使用 Eloquent 自动维护时间戳的中间表...
注意我们取出的每个 Role 模型对象会自动给一个 pivot 属性。这属性包含了枢纽表的模型数据,可以像一般的 Eloquent 模型一样使用。默认pivot 对象只会有关联键的属性。如果您想让 pivot 可以包含其他枢纽表的字段,可以在定义关联方法时指定那些字段:return $this->belongsToMany('Role')->withPivot('foo', 'bar...
默认的,只有模型的键会被pivot对象提供,如果你的中间表包含了额外的属性,你必须在定义关联时指定它们: return $this->belongsToMany("AppRole")->withPivot("column1", "column2"); 如果你想要中间表自动维护created_at和updated_at时间戳,你可以在定义关联时使用withTimestamps方法: ...
另一个非要有用的函数是更新整个 pivot 表。一个常见的例子是:管理面板中,一个商品下面有多个商店的多选框,在执行更新操作的时候,需要检查所有的商店,删除新的多选数组中不存在的,并添加或更新有的。一件头疼的事情。 但现在不是了,有一个叫做 sync() 的方法,它接受一个数组参数,然后会自动执行完所有的同步...
需要注意的是,我们取得的每个 Role 模型对象,都会被自动赋予 pivot 属性,它代表中间表的一个模型对象,能像其它的 Eloquent 模型一样使用。默认情况下,pivot 对象只包含两个关联模型的键。如果中间表里还有额外字段,则必须在定义关联时明确指出:return $this->belongsToMany('App\Role')->withPivot('column1', ...