Есть ли способ использовать 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
получить этого связанного пользователя, даже если он удален?
В зависимости от ваших потребностей, вы можете определить отношения:
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
Вы можете сделать это так:
$mark->withTrashed()->first()->user->withTrashed()->first()