Я работаю над чат-приложением, в котором я использовал Pusher для чата в реальном времени, тем временем сохраняя каждое сообщение в моей БД тоже.Как сортировать объединенные коллекции в Laravel 5?
Сообщения схема таблицы выглядит так:
public function up()
{
Schema::create('messages', function(Blueprint $table)
{
$table->increments('id');
$table->integer('sender_id')->unsigned();
$table->foreign('sender_id')->references('id')->on('users')->onDelete('cascade');
$table->integer('receiver_id')->unsigned();
$table->foreign('receiver_id')->references('id')->on('users')->onDelete('cascade');
$table->text('body');
$table->timestamps();
});
}
Это очень просто. Два внешних ключа, которые относятся к отправителю и получателю.
Чат работает нормально, и пользователи могут общаться друг с другом. Но теперь мне также нужно, чтобы пользователи могли видеть старые сообщения.
У меня есть MessageController
, в котором индексный метод выглядит так:
public function index()
{
$data = $this->request->all();
$receivedMessages = $this->user->currentUser()->receivedMessages()
->where('sender_id', $data['chatUserId'])
->get();
$sentMessages = $this->user->currentUser()->sentMessages()
->where('receiver_id', $data['chatUserId'])
->get();
$messages = $receivedMessages->merge($sentMessages)->sortBy('created_at');
return $messages;
}
В основном я выборки на все сообщения, в которых текущий пользователь является либо отправитель или получатель, и наоборот для другого пользователь, id которого я поставляю с переднего конца в chatUserId
.
Я использовал метод merge для объединения этой коллекции, и я пытаюсь запустить методы sortBy
или sortByDesc
, но они, похоже, не работают.
У меня есть простой манекен чат с парой пользователей следующим образом:
Веб-сервис на [email protected]
возвращает это:
{
"0":{
"id":"10",
"sender_id":"3",
"receiver_id":"1",
"body":"Hi Rohan. How are you?",
"created_at":"2015-06-19 08:32:49",
"updated_at":"2015-06-19 08:32:49"
},
"1":{
"id":"12",
"sender_id":"3",
"receiver_id":"1",
"body":"I have been good too.",
"created_at":"2015-06-19 08:33:06",
"updated_at":"2015-06-19 08:33:06"
},
"2":{
"id":"9",
"sender_id":"1",
"receiver_id":"3",
"body":"Hi Ava",
"created_at":"2015-06-19 08:32:41",
"updated_at":"2015-06-19 08:32:41"
},
"3":{
"id":"11",
"sender_id":"1",
"receiver_id":"3",
"body":"I am good Ava. How have you been?",
"created_at":"2015-06-19 08:32:59",
"updated_at":"2015-06-19 08:32:59"
}
}
Это явно не сортируется как способ Я хочу, чтобы это было. Как сортировать объединенные коллекции в Laravel по полю created_at
?
Отлично. Работает на меня. Вы забыли «использовать ($ data)» в обратном вызове. Спасибо. :) – Rohan
Ой, мой плохой. Если вам действительно нужно использовать сортировку, я уверен, что мне пришлось обмануть ее, чтобы она работала. Я проведу дома и прошу прокомментировать это через несколько часов. – zeratulmdq