Как превратить коллекцию в массив в laravel

Я не уверен, правильно ли написан мой заголовок, но я пытаюсь получить все уведомления, которые пользователь не прочитал. У меня есть 2 таблицы, первая таблица - уведомления, а вторая - read_notifications.

Вот мой код в модели User.php

$read = DB::table('read_notifications')->select('notification_id')->where('user_id', $this->id)->get();
$unread = Notification::whereNotIn('id', $read)->get();

Здесь я получаю все идентификаторы уведомлений в таблице read_notifications и хочу поместить их в оператор $unread.

Ошибка, которую я получаю, когда это делаю, это

Объект класса stdClass не может быть преобразован в строку


person Chibi    schedule 29.04.2020    source источник
comment
Отвечает ли это на ваш вопрос? коллекция laravel в массив   -  person Collin    schedule 29.04.2020
comment
Я пробовал это, но все равно получаю ту же ошибку   -  person Chibi    schedule 29.04.2020
comment
Вы установили отношения между Notification и ReadNotification? Есть ли вообще ReadNotification модель? Я предполагаю, что это можно сделать с помощью whereDoesntHave метода с правильно установленными отношениями.   -  person Tpojka    schedule 29.04.2020


Ответы (3)


Notification::whereNotIn('id', $read)->get();

$read - это объект, а id должен быть строкой (или целым числом). Вы должны использовать поле id из вашего $read объекта, например $read[$i]->id.

Также whereNotIn требуется массив в качестве второго аргумента, поэтому вам нужно собрать свои идентификаторы из $read в массив типа [1,2,3].

person Dmitriy Pavlichenko    schedule 29.04.2020
comment
Это то, что я пытаюсь сделать, я пытаюсь сделать так, чтобы мои идентификаторы выглядели как [1,2,3], чтобы я мог использовать его в выражении whereNotIn - person Chibi; 29.04.2020

Спасибо за помощь. Я нашел то, что мне было нужно, мне нужно было воспользоваться методом выщипывания.

Вот обновленный код

$read = DB::table('read_notifications')->select('notification_id')->where('user_id', $this->id)->pluck('notification_id');
$unread = Notification::whereNotIn('id', $read)->get();
person Chibi    schedule 29.04.2020

для работы whereNotIn $read должен быть массив.

 $read = DB::table('read_notifications')->select('notification_id')->where('user_id', $this->id)->get();
foreach($read as $re)
   $ot[] = $re->notification_id;
$unread = Notification::whereNotIn('id', $ot)->get();

ИЛИ вы можете использовать pluck

 $read = DB::table('read_notifications')->where('user_id', $this->id)->pluck('notification_id');

 $unread = Notification::whereNotIn('id', $read)->get();
person Jithesh Jose    schedule 29.04.2020