Как использовать withTrashed, когда я запрашиваю, используя загружаемую загрузку?

У меня есть несколько таблиц, одна из которых - таблица с именем Users, где есть мягкие удаленные строки.

У меня есть код вроде:

$appointments = Appointment::with('user')->get();

$return = array();
foreach ($appointments as $key => $appointment) {
    $return[] = array(
        $appointment->customer_name,
        $appointment->date->format('d/m/Y'),
        $appointment->time,
        $appointment->status,
        $appointment->user->full_name,
    );
}

Поскольку строка с пользователем удалена, я получаю сообщение об ошибке в строке:

$appointment->user->full_name

потому что для этого пользователя нет соответствия.

Я попытался добавить withTrashed() в первую строку, как до, так и после with('user'), но это не помогло.

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

Ответы

Ответ 1

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

$appointments = Appointment::with(array('user' => function($query) {
    $query->withTrashed();
}))->get();

Это должно применяться сTrashed() к запросу, который захватывает пользователей, а не запрос, который захватывает встречи.

О, и для уточнения, вы можете добавить withTrashed() в оба запроса:

$appointments = Appointment::with(array('user' => function($query) {
    $query->withTrashed();
}))->withTrashed()->get();

Изменить: просто подумал о более легком методе:

Добавить withTrashed() в отношении user() (это делается только в том случае, если вы хотите, чтобы это применило КАЖДОЕ время, когда вы вызываете это отношение):

public function user() {
  return $this->hasOne('User')->withTrashed();
}