Использование withTrashed со связями в Eloquent

Есть ли способ использовать withTrashed с отношениями в Eloquent.

Что мне нужно, так это У меня есть таблица и модель Mark и другой стол User, User имеет много Mark а также Mark принадлежит User, Так что я определил это в моделях Eloquent.

Теперь мне нужно получить экземпляр Mark это мягко удалено. Это не проблема, если User не удаляется мягко, но если оба Mark а также User мягко удалены, я получаю ошибку Trying to get property of non-object, так как

$mark->user

не вернет фактического пользователя, потому что он мягко удален.

Есть ли способ, которым я могу сделать что-то вроде

$mark->withTrashed()->user

получить этого связанного пользователя, даже если он удален?

15

Решение

В зависимости от ваших потребностей, вы можете определить отношения:

public function marks()
{
return $this->hasMany('Mark')->withTrashed();
}

// then just
$user->marks;

или используйте его на лету:

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

// or when lazy/eager loading
$user = User::with(['marks' => function ($q) {
$q->withTrashed();
}])->find($userId);

И в вашем вставленном примере это будет:

$mark->user() // get relation object first
->withTrashed() // apply withTrashed on the relation query
->first();  // fetch the user

// alternatively you use getResults relation method
$mark->user()
->withTrashed()
->getResults();  // returns single model for belongsTo

$user->marks()->withTrashed()
->getResults(); // returns collection for hasMany
41

Другие решения

Вы можете сделать это так:

$mark->withTrashed()->first()->user->withTrashed()->first()
3

По вопросам рекламы [email protected]