簡體   English   中英

Laravel 5-獲取按列分組的查詢構建器結果

[英]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.

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