更新连接用户Laravel 5.4重复的用户已经attched
问题描述:
我需要更新连接用户,我有用户重视的项目,我需要通过增加新的附加用户编辑的项目,所以我的代码看起来像这样更新连接用户Laravel 5.4重复的用户已经attched
$project = Project::find($id);
$project->update($request->all());
$array = $project->users;
foreach ($array as $item){
if($request->input('user_id') != $item->id){
Log::info('user new ids: ',[$item->id]);
$project->users()->attach($request->input('user_id'));
}
else{
Log::info('user aleardy attached');
}
}
return response()->json($organisation);
这代码重复的用户数据库中我发现同样的用户分配到项目多次
另外这个代码只是为了连接,那么如何解决这个问题,并感谢
答
你通过附加到项目的每个用户循环。在每次迭代中,您将检查id
是否与提交的user_id匹配。对于几乎所有的迭代,这将评估为false,并且用户将再次连接。
例如: 用户4
,5
,6
附加到该项目。 user_id
= 2
。
的循环会导致如下:
4!=2
,使连接用户。
5!=2
,所以附加用户。
6!=2
,所以附加用户。
正如你所看到的,用户将被添加3次。
我会用这样的:
if ($project->users()->where('users.id',$request->input('user_id'))->count()==0){
Log::info('user new ids: ',[$item->id]);
$project->users()->attach($request->input('user_id'));
}else{
Log::info('user aleardy attached');
}
上面的查询将寻找附着在项目匹配提交的user_id
任何用户。如果计数为0,则user_id
未附加到该项目,因此您可以附加该项目。
谢谢@Brad我得到这个错误,SQLSTATE [23000]:完整性约束违规:1052列'id'在where子句是不明确的(SQL:select count(*)as aggregate – Akram
已更新的答案。指定表名(users.id而不只是id) – Brad
感谢您的回答 – Akram