I am implementing chat like application in Laravel. I want to display latest 10 records like,
message 1
message 2
message 3
message 4
.
.
.
Here I am able to get latest 10 records from db and get data like,
message 10
message 9
message 8
message 7
.
.
.
I want reverse this order.
Controller method
public function getMessages(MeetupGroup $group)
{
$messages = $group->meetup_group_messages()->paginate(2);
return response()->json(['messages' => $messages]);
}
Group Model
public function meetup_group_messages()
{
return $this->hasMany('App\Models\MeetupGroupMessage\MeetupGroupMessage', 'meetup_group_id', 'id')->latest()->with('user');
}
I have checked reverse()
but it works on model object not on query object. I am not getting how to reverse on this.
Try Controller Method as:
use Illuminate\Support\Collection;
public function getMessages(MeetupGroup $group)
{
$messages = $group->meetup_group_messages()->paginate(2);
return response()->json(['messages' => $messages->sortBy('Your_Column_name')->values()->all()]);
}
Or
public function getMessages(MeetupGroup $group)
{
$messages = $group->meetup_group_messages()->paginate(2);
$records = collect($messages)->sortBy('Your_Column_name')->values()->all();
return response()->json(['messages' => $records]);
}
There are a few problems with how you are going about doing this.
Follow the documentation for Naming Conventions of your Model, Controller and Migration. This answer simplifies naming conventions.
Your controller and model should also be a resource so that it is easily accessible through your Route. This also enables CRUD functionality. This can be achieved with an artisan command. This command also uses Laravel's Naming Convention for your database table, migration, controller and model, making it easy to follow best practices in Laravel development.
php artisan make:model Message --migration --controller --resource
Now add the resource to your routes/web.php file.
Route::resource('messages', 'MessagesController');
To review newly created resource routes, use this command:
php artisan route:list
You will then need to create 3 blade views, index, create and edit. I suggest creating a folder named "messages" to sort these views from others. Your controller will have an index function within it. It should look like this.
public function index()
{
$messages = Message::orderBy('updated_at', 'asc')->paginate(2);
return view('messages.index', compact('messages'));
}
Your index.blade.php file should contain this code:
@foreach($message as $message)
<p>{{ $message->db_column_name1 }} </p>
<p>{{ $message->db_column_name2 }} </p>
@endforeach