Как превратить коллекцию в массив в laravel - PullRequest
1 голос
/ 29 апреля 2020

Я не уверен, что мой заголовок сделан правильно, но я пытаюсь получить все уведомления, которые пользователь не прочитал. У меня есть 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 не может быть преобразован в строку

Ответы [ 3 ]

0 голосов
/ 29 апреля 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();
0 голосов
/ 29 апреля 2020

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

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

$read = DB::table('read_notifications')->select('notification_id')->where('user_id', $this->id)->pluck('notification_id');
$unread = Notification::whereNotIn('id', $read)->get();
0 голосов
/ 29 апреля 2020
Notification::whereNotIn('id', $read)->get();

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

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

...