[英]After using where condition how to get single column values without repeated values in a table in laravel 5.4
我正在使用Laravel 5.4。 我有以下三個表格。
用戶表
id name username
1 krish krish@gmail.com
2 kaviz kaviz@gmail.com
角色表
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"
}
]
我認為您的查詢正在針對每個$ users值運行,這就是為什么它為每個查詢存儲值的原因,您應該更改邏輯,或者最后在php中使用array_unique()函數希望對您有所幫助
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);
我認為您應該在Rolesusers中執行“ groupBy”。 請嘗試以下回答您的查詢,
$users = Rolesusers::select('user_id')->groupBy('user_id')->toArray();
$user_names = User::select('name')->whereIn('id', $users)->get();
return $user_name;
請注意,在您的代碼中,查詢在循環中運行,永遠不要這樣做。 請不要在循環內運行查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.