我尝试使用withTrashed()进行急切加载。我在我的模型中创建了一个新的_withtrashed函数,但查询返回时我的客户端为NULL
客户端模型:
// Client
public function client()
{
return $this->belongsTo('App\Client');
}
// Client (withtrashed for soft deletes)
public function client_withtrashed()
{
return $this->belongsTo('App\Client')->withTrashed();
}
订单控制器:
/**
* Show order.
*/
public function show($id)
{
$order = Order::with('client_withtrashed') ---> it works normally with: Order::with('client') , except I don't get the soft deleted rows
->where('id', '=', $id)
->firstOrFail();
DD($顺序);显示一个空客户端
#relations: array:1 [
"client_withtrashed" => null
有什么想法吗?我决定使用上面的解决方案,因为我无法使用toTrashed()来处理我急切的查询$order = Order::with('client_withtrashed')->withTrashed()
答案 0 :(得分:7)
您无法在关系中定义,但您可以在急切加载时添加约束:
$order = Order::with(['client' => function ($query) {
$query->withTrashed();
}])
->where('id', '=', $id)
->firstOrFail();
您可以查看预先加载的约束in the docs
您可以在关系中定义withTrashed(),只需确保您的模型使用SoftDeleteTrait。
use Illuminate\Database\Eloquent\SoftDeletingTrait;
class Client extends Eloquent {
use SoftDeletingTrait;
}
答案 1 :(得分:0)
就我而言
\App\User::withTrashed()->findOrFail($userId)->first()
然后给我错误的数据(正在提供身份验证用户数据),
\App\User::withTrashed()->whereId($userId)->first()
给我确切的数据。