[英]Laravel 5 - get query builder results grouped by column
例如,我有查詢:
$posts = DB::table('posts')->select(['id', 'user_id', 'title'])->get();
然后$posts
數組如下所示:
array(3) {
[0]=>
object(stdClass) (3) {
["id"]=>
int(1)
["user_id"]=>
int(1000)
["title"]=>
string(8) "Post # 1"
}
[1]=>
object(stdClass) (3) {
["id"]=>
int(2)
["user_id"]=>
int(2000)
["title"]=>
string(8) "Post # 2"
}
[2]=>
object(stdClass) (3) {
["id"]=>
int(3)
["user_id"]=>
int(2000)
["title"]=>
string(8) "Post # 3"
}
}
如您所見, id 1000
用戶有1個帖子, id 2000
用戶有2個帖子。
我想以user_id
作為鍵的關聯數組來獲得結果:
array(2) {
[1000]=>
array(1) {
[0]=>
object(stdClass) (3) {
["id"]=>
int(1)
["user_id"]=>
int(1000)
["title"]=>
string(8) "Post # 1"
}
}
[2000]=>
array(2) {
[1]=>
object(stdClass) (3) {
["id"]=>
int(2)
["user_id"]=>
int(2000)
["title"]=>
string(8) "Post # 2"
}
[2]=>
object(stdClass) (3) {
["id"]=>
int(3)
["user_id"]=>
int(2000)
["title"]=>
string(8) "Post # 3"
}
}
}
是否有任何不錯的Laravel解決方案來執行此操作?
您可能要研究雄辯的關系,而不是使用查詢生成器。 在您的情況下,您具有一對多關系。 因此,您將擁有一個類似於以下內容的User
模型:
class User extends Model {
public function posts()
{
// One User can have many Posts
return $this->hasMany('App\Post');
}
}
和Post
模型:
class Post extends Model {
public function user()
{
// A Post belongs to one User
return $this->belongsTo('App\User');
}
}
然后,您可以像這樣按用戶獲取帖子:
$users = User::all();
foreach ($users as $user)
{
$posts = $user->posts;
// $posts will now contain a Collection of Post models
}
Laravel沒有辦法做到這一點。 但是您可以使用以下功能手動執行此操作:
public static function makeAssocArrByField($arr, $field)
{
$assocArr = array();
foreach($arr as $arrObj)
{
if(isset($arrObj[$field]))
$assocArr[$arrObj[$field]] = $arrObj;
}
return $assocArr;
}
調用方法為:
$posts = makeAssocArrByField($posts, 'user_id');
這將根據您所需的格式返回數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.