Laravel - где подобная функция не работает в некоторых случаях - PullRequest
1 голос
/ 30 марта 2020

Я новичок в Laravel 6 и у меня есть вопрос, касающийся функции where ().

У меня есть модель User и модель товара, в моей модели пользователя я настроил отношение как hasMany (App \ Article :: class), что означает, что у пользователя может быть много статей. Предположим, что у пользователя 1 есть несколько статей с учебными пособиями «Как…».

Если я попробую:

$user->articles()->where('title', 'like', '%how to%')->get();

, он показывает все заголовки, которые имеют формулировки «как», однако, если я делаю:

$user->articles->where('title', 'like', '%how to%'); //but $user->articles->where('id', 2); works perfectly

Возвращает пустой результат. Почему?

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

это потому, что ваш первый метод where () $user->articles()->where('title', 'like', '%how to%')->get(); создает запрос SQL (QueryBuilder https://laravel.com/docs/6.x/queries).

Ваш второй метод where () пытается получить значение из отношения один на один. Если вы хотите получить значение отношения «многие ко многим», вам нужны паратезы - вы должны использовать функцию $user->articles().

0 голосов
/ 30 марта 2020

Поскольку вы не указали метод ->get()

Чтобы получить данные, вы должны указать 1 из этих методов ->first(), ->last(), ->find()

Метод ->all() используется, когда вы не хотите ограничивать какие-либо условия для модели.

Если он не работает, см. Ссылку Laravel -5 «LIKE» эквивалент (Eloquent)

...