Как использовать 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();
}