簡體   English   中英

使用where條件后,如何在laravel 5.4的表中獲取單列值而不重復值

[英]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);

參見array_unique雄辯的collection unique()

我認為您應該在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM