2017-05-14 76 views
0

我使用Laravel 5.4获取单个列的值没有在表中重复的值之后。我有三个如下表。使用where条件如何laravel 5.4

用户表

id   name   username   

1   krish  [email protected]  

2   kaviz  [email protected]  

角色表

id  role  sub_role 

1  admin  default 

2  support default 

3  Hr  default 

3  admin  admin_1 

roles_users

id user id role id 

1  1  1 

2  1  2 

3  1  3 

3  2  2 

我的控制器

$users=Rolesusers::all(); 
foreach($users as $user) 
{ 
    $user_names[]=User::where('id', '=', $user->user_id)->groupby('name')->select('name')->get(); 
} 
return $user_name; 

我的结果

[ 
    { 
    "name": "krish" 
    } 
    { 
    "name": "krish" 
    } 
    { 
    "name": "krish" 
    } 
    { 
    "name": "kaviz" 
    } 
] 

,但我需要一个结果,而不重复的值,比如:

[ 
    { 
    "name": "krish" 
    } 
    { 
    "name": "kaviz" 
    } 
] 

回答

0

我想你的查询运行的每个$用户值这就是为什么它存储每个查询的值你应该改变你的逻辑或在你使用最后array_uni que()在PHP函数希望这会帮助你

0

where子句返回一个集合,所以你可以利用集合上的unique()方法。

在你的情况

foreach($users as $user) 
    { 
     $user_names = User::where('id', '=', $user->user_id)->groupby('name')->select('name')->get(); 

    } 

    $user_names->unique('name'); 

    dd($user_names); 

或者,使用数组

foreach($users as $user) 
    { 
     $user_names[] = User::where('id', '=', $user->user_id)->groupby('name')->select('name')->get(); 

    } 
$user_names = array_unique($user_names); 
print_r($user_names); 

看到array_uniqueeloquent collection unique()

+0

其工作感谢的答案,但它不是完全填满我的项目becouse后,上面的过程我的编码是这样 –

+0

其实我很抱歉我不是提我的全编码结构的结构是我下面贴了。但该过程不能正常使用上述解决方案。所以请帮助我下面张贴编码结构。 –

0

我认为你应该做你的 'GROUPBY' 你Rolesusers。请尝试以下回答您的查询,

$users = Rolesusers::select('user_id')->groupBy('user_id')->toArray(); 
    $user_names = User::select('name')->whereIn('id', $users)->get(); 
    return $user_name; 

请注意,在你的代码,查询中应该从来没有做过一个循环运行。请不要在循环中运行查询。

+0

对不起,我误解了你的问题并且最初发布在适当的答案中。现在,我更新了我的答案 – manian