Вопрос:

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

laravel

19275 просмотра

1 ответ

53553 Репутация автора

У меня есть несколько таблиц, одна из которых является таблицей, в 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')но это не помогло.

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

Автор: Rich Bradshaw Источник Размещён: 24.02.2014 06:12

Ответы (1)


67 плюса

6815 Репутация автора

Я не уверен на 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();
}
Автор: TonyArra Размещён: 24.02.2014 06:26
Вопросы из категории :
32x32