Laravel Eloquent - возвращает массив значений из условного отношения hasMany. - PullRequest
0 голосов
/ 27 апреля 2020

Я довольно новичок в PHP, и это меня действительно отбросило. Я знаю, что мог бы сделать это с raw SQL, но я бы предпочел сделать это правильно.

У меня установлены отношения, и они работают нормально.

У меня есть таблица домов, я хочу получить имена всех людей в этих домах, если дома имеют красную крышу, но только если у человека коричневые ботинки.

    Houses::with('people')
        ->whereHas('people', function($q){
            $q->where('shoes', 'brown');
        })->where('roof','red')->get()

Это все, что я получил.

Таблица Домов:

+----+--------+
| id | roof   |
+----+--------+
|  1 | red    |
|  2 | blue   |
|  3 | red    |
+----+--------+

Таблица людей

+----+----------+-------+-------+
| id | house_id | shoes | name  |
+----+----------+-------+-------+
|  1 |        1 | brown | paul  |
|  2 |        1 | brown | susie |
|  3 |        2 | red   | bob   |
|  4 |        2 | brown | kate  |
|  5 |        3 | brown | frank |
+----+----------+-------+-------+

Мой желаемый вывод - это массив имен людей, подобных этому:

[paul, susie, frank]

Я чувствую себя так, будто весь день бьюсь головой о стену

1 Ответ

0 голосов
/ 27 апреля 2020

Поскольку вы запрашиваете людей, вам лучше начать с вашей People модели.

Обратите внимание, что whereHas ожидает имя таблицы, а не отношение в первом аргументе.


    $people = People::where('shoes', 'brown')
        ->whereHas('houses', function ($query) {
            $query->where('roof', 'red');
    })->get();

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