Laravel проверяет, пусто ли отношение

У меня есть объект с некоторыми отношениями, и мне нужно проверить, пусты ли эти отношения, я пытаюсь проверить с помощью is_null, isset,! = Undefined и т.д., но ничего не работает, вот отношения, которые я получаю, когда он пуст:

object(Illuminate\Database\Eloquent\Collection)#197 (1) {
  ["items":protected]=>
    array(0) {
  }
}

Есть ли способ легко это проверить? Спасибо.

$ модель-> отношение () -> существует ()

Yevgeniy Afanasyev 19.12.2019 01:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
25
1
37 454
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

    $model->relation()->exists()
if (count($model->relation))
{
  // check exists
}

также 2-й способ

if (!is_null($model->relation)) {
   ....
}

Я уже пробовал второй метод со своим отношением (is_null ($ эксперимент-> tm ())), но это тоже не работает: / и первый мне ничего не возвращает: /

Jessy 17.07.2018 15:32
Ответ принят как подходящий

Это можно сделать разными способами.

В самом запросе вы можете фильтровать модели, не имеющие связанных элементов:

Model::has('relation')->get()

Если у вас есть модель, если вы уже загрузили коллекцию, вы можете проверить количество коллекции:

$model->relation->count();

Если вы хотите проверить без загрузки отношения, вы можете выполнить запрос по отношению:

$model->relation()->exists()

Примечание: Замените relation на имя вашей связи в приведенных выше примерах.

Странно то, что в моей модели нет метода отношения

Jessy 17.07.2018 15:33

Отношение - это имя ваших отношений в этом контексте, а не буквальный метод отношений.

Devon 17.07.2018 15:33

Фантастический ответ, спасибо

andcl 16.01.2021 13:58

Если модель уже загрузила взаимосвязь, вы можете определить переменную null или вызвать isEmpty(), чтобы проверить связанные элементы:

// For one relation:
if ( $model->relation ) {
    // ...
} else {
    // $model->relation is null
}

// For many relations:
if ( $model->relation->isEmpty() ) {
    // ...
}

$ model-> Relations-> isEmpty () - это определенный ответ на этот вопрос.

PatricNox 18.04.2020 17:04

Это правильный ответ, $model->relation()->exists() запускает другой запрос, даже с нетерпеливо загруженными результатами.

panthro 15.05.2020 15:52

Это не дает прямого ответа на вопрос, но вы можете использовать помощник Laravel optional для вызова методов для отношения, которое, как вы подозреваете, может не иметь значения:

optional($user->comments)->where('is_popular', true);

Если у пользователя нет комментариев, будет возвращено значение null. В противном случае он вернет популярные комментарии пользователя.

Я думаю, он вернет пустую коллекцию, а не Null

Yevgeniy Afanasyev 19.12.2019 01:26

Во-первых, вы можете проверить, загружен ли ваш Relation.

if ($user->relationLoaded('posts'))...

во-вторых, когда он загружен, вы можете захотеть посмотреть, является ли он пустым Collection или Null,

if ($user->posts()->exists())...

PS

use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Eloquent\Collection;

Другие вопросы по теме