Есть ли способ использовать withTrashed
с отношениями в Eloquent.
Мне нужно это. У меня есть таблица и модель Mark
и другая таблица User
. User
много Mark
и Mark
принадлежит User
. Поэтому я определил это в моделях «Красноречивый».
Теперь мне нужно получить экземпляр 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()