GroupBy Query Laravel 5.1

I'm having problem in fetching the data using groupBy, I don't where I'm wrong, I have done it many times before, but today I'm wrong some where and I don't know where. Following is the Table from which I want to select the Data:

Table Name: user_questions

id | user_id | message | read_status_user | read_status_support | answered

Now suppose if one user sends more than one messages, then user_id will be repeated, So to want all the message from one particular user I'm firing the query like following:

UserQuestion::groupBy('user_id')->get();

This should give me the result like

user_id = 1 > message1
user_id = 1 > message2
....
user_id = 1 > message...(if any)

user_id = 2 > message1
user_id = 2 > message2
..... 
So on...

But this is always giving me only one message from the particular user. I don't know why. Is there any mistake? I have tried another queries too, but all are giving me the same result.

Please help me with this. Everybody's help will be highly appreciated. Thanks to all of you in advance.

Try like this

$users = DB::table('table_name')
        ->groupBy('user_id')
        ->get();

after that push that to foreach loop

foreach ($users as $user)
{
    var_dump($user->name);
}

ordering-grouping-limit-and-offset in Laravel

The issue here is that you are calling the groupBy function of the query builder object, which is what generates the query for your database. When you call the ->get() method, the query is executed and a Collection object containing the results is returned. What you are looking to use is the groupBy method of Laravel's Collection class, which means you need to put the ->groupBy('user_id') after the ->get().

Assuming you have the following data:

user_question
user_id     question_id
1           1
1           2
1           3
2           4
3           5
3           6

Your current code

UserQuestion::groupBy('user_id')->get();

executes this query

select * from user_question group by user_id;

returning one row per user, since that's what group by does in MySQL.

user_id     question_id
1           1
2           4
3           5

If instead, you do the following

$collection = UserQuestion::get();

the query is simply

select * from user_question

and when you call $collection->groupBy('user_id') on this collection, you get data structured like

[
     1 => [
         [ 'user_id' => 1, 'question_id' => 1 ],
         [ 'user_id' => 1, 'question_id' => 2 ],
         [ 'user_id' => 1, 'question_id' => 3 ]
      ],
      2 => [
          [ 'user_id' => 2, 'question_id' => 4 ],
      ],
      3 => [
          [ 'user_id' => 3, 'question_id' => 5 ],
          [ 'user_id' => 3, 'question_id' => 6 ]
      ]
]

You've probably found the solution to your problem by now but otherwise, I would suggest to use the relationships. In the User model, I would do:

public function questions()
{
    return $this->hasMany('App\UserQuestion');
}

Then I would get all the users and loop through them to get their messages.

$users = User::all();
$users->each(function ($user) {
    $questions = User::find($user->id)->questions;
});