Laravel: Как использовать выражение where для родительской и дочерней модели в отношении один ко многим - PullRequest
0 голосов
/ 13 ноября 2018

Таблица: группы

id name status

Таблица: предметы

id group_id name publish

Модель: группа

public function items()
{
    return $this->hasMany('App\Item');
}

Теперь я хочу получить все групповые модели, в которых выполняется статус, а затем все связанные модели элементов, в которых публикуется публикация.

Я делаю это ...

$query = Group::where('status', 'running')->items()->where('publish', 'published')->get();

, которое показывает следующее сообщение об ошибке.

Call to undefined method Illuminate\Database\Eloquent\Builder::items()

Что не так? Есть ли способ сделать это?

Примечание: РЕДАКТИРОВАТЬ:
**How will I get all item models where group model's status is running and item model's publish is published.**

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Вы должны попробовать это:

$users = Group::whereHas('items', function($q){
    $q->where('publish', 'published');
})
->where('status', 'running')
->get();
0 голосов
/ 13 ноября 2018

В вашем сценарии запрос должен выглядеть следующим образом:

$result = Group::whereHas('items', function($query){
              $query->where("publish","published");
          })
          ->where("status", "running")
          ->select('items')
          ->get();

$result будет иметь все groups с status как running и все «элементы» со статусом publish какpublished.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...