Laravel: возможно ли применить a ->where() поверх hasMany() ?

#php #laravel #orm

#php #laravel #orm

Вопрос:

У меня есть эта notifications таблица, в которой есть status столбец. Статус может быть, среди прочего, «ack» и «noack». Итак, уведомления принадлежат пользователю. Если я хочу использовать ORM для просмотра уведомлений пользователя, я бы использовал a hasMany() в пользовательской модели, например:

 public function notificaciones()
{
  return $this->hasMany('AppNotification', 'dest_id', 'id');
}
  

И это работает отлично. (dest_id означает, для кого предназначено уведомление, есть другой origin_id, который сообщает, кто вызвал уведомление, любыми способами, это работает)

Теперь я хочу видеть только уведомления без привязки (без привязки), я думал о:

 public function notificaciones()
{
  return $this->hasMany('AppNotificacion', 'dest_id', 'id')
                  ->where('status', 'noack');
}
  

Но это приводит к пустой коллекции.

Как это можно сделать?

Комментарии:

1. Нет никаких причин, по которым этот код не будет работать. Это весь код и как это используется на практике?

Ответ №1:

Вы можете сделать что-то подобное,

Вы создаете новую функцию в той же модели и вызываете этот основной метод с условием получения noack уведомлений.

 public function noack_notifications() {
    return $this->notificaciones()->where('status','=', 'noack');
}
  

Когда вы вызываете этот метод из контроллера с помощью find .

 $user =  User::find($id);
dd($user->noack_notifications()->get());
  

Это должно решить вашу проблему.

Комментарии:

1. Эта функция вернет запрос, который он должен включить ->get() в конце для получения коллекции элементов?

2. Да в пользовательской модели, и я обновил свой ответ. Один раз проверьте сейчас @namelivia