2017-06-01 36 views
0

我需要更新连接用户,我有用户重视的项目,我需要通过增加新的附加用户编辑的项目,所以我的代码看起来像这样更新连接用户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); 

这代码重复的用户数据库中我发现同样的用户分配到项目多次
另外这个代码只是为了连接,那么如何解决这个问题,并感谢

回答

2

你通过附加到项目的每个用户循环。在每次迭代中,您将检查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未附加到该项目,因此您可以附加该项目。

+0

谢谢@Brad我得到这个错误,SQLSTATE [23000]:完整性约束违规:1052列'id'在where子句是不明确的(SQL:select count(*)as aggregate – Akram

+0

已更新的答案。指定表名(users.id而不只是id) – Brad

+0

感谢您的回答 – Akram