Laravel Eloquent, точечная нотация с несколькими глубинами, использующая withTrashed(), возвращающая нулевые отношения

У меня возникли проблемы с использованием withTrashed() при использовании многоточечной нотации глубины.

Все работает хорошо, когда:

with(['trials.activity' => function ($q) { $q->withTrashed(); }])->

дд() возвращает:

#relations: array:1 [▼
    "activity" => Activity {#1139 ▶}
  ]



Однако при добавлении нотации с множественной глубиной отношения удаленной строки не отображаются, например:

with(['trials.activity.goalcategories.goals.scoretype' => function ($q) { $q->withTrashed(); }])->

дд() возвращает:

#relations: array:1 [▼
    "activity" => null
  ]

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

Есть ли способ заставить его работать с закрытием или есть какая-то работа?

Что значит "не работает"?

Jonas Staudenmeir 10.02.2019 21:00

@JonasStaudenmeir Э-э, это было не очень описательно, я отредактировал вопрос и добавил несколько выдержек из ответов dd. Спасибо.

greebo3 10.02.2019 21:27

В каком отношении были удалены строки?

Travis Britz 10.02.2019 21:28

@TravisBritz отношения активности имеют удаленные строки.

greebo3 10.02.2019 21:31
Стоит ли изучать 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-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
4
1 468
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В настоящее время вы применяете withTrashed() к отношениям scoretype.

Используйте это вместо этого:

->with(['trials.activity' => function ($q) {
    $q->withTrashed();
}, 'trials.activity.goalcategories.goals.scoretype']);

Обратный вызов выполняется последним в списке отношений, поэтому вам нужно разбить его посередине:

->with(['trials.activity' => function ($q) {
        $q->withTrashed()
          ->with(['goalcategories.goals.scoretype']);
}])

Спасибо, что нашли время, чтобы ответить, сработало отлично. Я должен был дать ответ Йонасу, поскольку он ответил несколькими минутами ранее. Тем не менее, я ценю ваше время, спасибо.

greebo3 10.02.2019 21:59

@greebo3 нет проблем! Однако между нашими ответами есть разница, поэтому вы можете перепроверить, что в их ответах также есть все данные, которые вы ожидали. Я не уверен на 100% в поведении, когда два разных отношения объединяются так, как продемонстрировал Джонас, поэтому я включил еще один ответ.

Travis Britz 10.02.2019 22:01

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