Laravel eloquent и Trashed об отношениях

Мне нужно получить отношение моделей, включая его мягко удаленные элементы, но только для этого 1 экземпляра. Я не хочу изменять модель, чтобы каждый раз, когда я использую связь, она возвращала также все мягко удаленные записи.

Как я могу этого добиться?

Модель пользователя

class User extends Authenticatable
{
  public function contacts(){
    return $this->hasMany('App\Contacts','user_id','id');
  }
}

Контроллер

$user = User::findOrFail($id);
//Need to be able to get the trashed contacts too, but only for this instance and in this function
$user->contacts->withTrashed(); //Something like this
return $user;

Как я могу получить удаленные строки только один раз в моем контроллере?

Спасибо

Проблема заключается в том, что использование $user->contacts возвращает пользователю коллекцию связанных записей контактов, в то время как $user->contacts() выполняет новый запрос.

Oluwatobi Samuel Omisakin 02.08.2018 15:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
15
1
21 897
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Вы можете использовать метод withTrashed по-разному.

Чтобы связать звонок с вашими отношениями, вы можете сделать следующее:

public function roles() {
    return $this->hasMany(Role::class)->withTrashed();
}

Чтобы использовать то же самое на лету:

$user->roles()->withTrashed()->get();

Для вашего особого сценария:

$user->contacts()->withTrashed()->get();

Мне было совершенно непросто просто запустить метод withTrashed() в самом представлении, где я зацикливаюсь на нем. Наверное, самый чистый способ добиться этого, спасибо!

S_R 02.08.2018 15:31

Как я могу фильтровать записи при извлечении записей с помощью withTrashed ()? laracasts.com/discuss/channels/laravel/…

hassanrazadev 27.03.2020 08:46

Вы можете сделать это с помощью:

$user = User::findOrFail($id);

$user->contacts()->withTrashed()->get(); //get all results

return $user;

Когда вы вызываете связь с (), вы можете добавить метод withTrashed(). После этого вам нужно get() результатов.

Глядя на документацию Laravel на Запрос моделей с обратимым удалением:

//The withTrashed method may also be used on a relationship query: 
$flight->history()->withTrashed()->get(); 

Проблема заключается в том, что использование $user->contacts возвращает пользователю коллекцию связанных записей контактов, в то время как $user->contacts() выполняет новый запрос.

Как бы вы подошли к вложенным отношениям? A принадлежит многим B и B имеет много C? Мне нужен способ сказать: «Дайте мне ВСЕ результаты для A (включая удаленные), где ВСЕ отношения (B и B-> C) показывают удаленные элементы». Это возможно?

Julian 04.12.2018 23:48

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