У меня есть объект с некоторыми отношениями, и мне нужно проверить, пусты ли эти отношения, я пытаюсь проверить с помощью is_null, isset,! = Undefined и т.д., но ничего не работает, вот отношения, которые я получаю, когда он пуст:
object(Illuminate\Database\Eloquent\Collection)#197 (1) {
["items":protected]=>
array(0) {
}
}
Есть ли способ легко это проверить? Спасибо.






$model->relation()->exists()
if (count($model->relation))
{
// check exists
}
также 2-й способ
if (!is_null($model->relation)) {
....
}
Я уже пробовал второй метод со своим отношением (is_null ($ эксперимент-> tm ())), но это тоже не работает: / и первый мне ничего не возвращает: /
Это можно сделать разными способами.
В самом запросе вы можете фильтровать модели, не имеющие связанных элементов:
Model::has('relation')->get()
Если у вас есть модель, если вы уже загрузили коллекцию, вы можете проверить количество коллекции:
$model->relation->count();
Если вы хотите проверить без загрузки отношения, вы можете выполнить запрос по отношению:
$model->relation()->exists()
Примечание: Замените relation на имя вашей связи в приведенных выше примерах.
Странно то, что в моей модели нет метода отношения
Отношение - это имя ваших отношений в этом контексте, а не буквальный метод отношений.
Фантастический ответ, спасибо
Если модель уже загрузила взаимосвязь, вы можете определить переменную null или вызвать isEmpty(), чтобы проверить связанные элементы:
// For one relation:
if ( $model->relation ) {
// ...
} else {
// $model->relation is null
}
// For many relations:
if ( $model->relation->isEmpty() ) {
// ...
}
$ model-> Relations-> isEmpty () - это определенный ответ на этот вопрос.
Это правильный ответ, $model->relation()->exists() запускает другой запрос, даже с нетерпеливо загруженными результатами.
Это не дает прямого ответа на вопрос, но вы можете использовать помощник Laravel optional для вызова методов для отношения, которое, как вы подозреваете, может не иметь значения:
optional($user->comments)->where('is_popular', true);
Если у пользователя нет комментариев, будет возвращено значение null. В противном случае он вернет популярные комментарии пользователя.
Я думаю, он вернет пустую коллекцию, а не Null
Во-первых, вы можете проверить, загружен ли ваш Relation.
if ($user->relationLoaded('posts'))...
во-вторых, когда он загружен, вы можете захотеть посмотреть, является ли он пустым Collection или Null,
if ($user->posts()->exists())...
PS
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Eloquent\Collection;
$ модель-> отношение () -> существует ()