我有两个模型,
User {
public function param()
{
return $this->belongsToMany(
Models'Param::class, 'param_user_map', 'user_id', 'param_id')
->withPivot('experience', 'param_extra');
}
}
Params {
public function user()
{
return $this->belongsToMany(
Models'User::class, 'param_user_map', 'param_id', 'user_id')
->withPivot('experience', 'param_extra');
}
}
和我的映射表
param_user_map
-param_id
-user_id
-experience
-param_extra
我正在处理的数据就像,
user_id param_id experience param_extra
51 2 3 param2_1
51 2 3 param2_2
51 3 3 param3_2
当我使用Eloquent同步这些数据时,只保存前两个中的一个。
是否有办法我可以同步数据与[param_id,user_id,param_extra]作为唯一的组合。
I tried with,
$table->unique(['param_id','user_id','param_extra']);
和
foreach ($data['param_collection'] as $param) {
$params = [
'experience' => $params['experience'],
'param_extra' => $params['param_extra'],
];
$user->param()->sync([$param['param_id'] => $params]);
}
没有工作。
有答案吗?
我认为你不能做你想要的sync
。如果您想做的不仅仅是创建唯一的"User"-"Param"对,没有额外的属性,您可以使用attach
:
foreach ($data['param_collection'] as $param) {
$user->param()->detach(); //if you want to clear previous params
$user->param()->attach($param['param_id'], [
'experience' => $param['experience'],
'param_extra' => $param['param_extra']
]);
}