[英]Eloquent withtrashed() for soft deletes on eager loading query - Laravel 5.1
我正在尝试使用 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
有任何想法吗? 我决定采用上面的解决方案,因为我无法使用 withTrashed() 来处理我急切的查询$order = Order::with('client_withtrashed')->withTrashed()
好吧,您不能在 relationship 上定义它,但是您可以在急切加载时添加约束:
$order = Order::with(['client' => function ($query) {
$query->withTrashed();
}])
->where('id', '=', $id)
->firstOrFail();
您可以在文档中检查预先加载约束
您可以在关系上定义 withTrashed() ,只需确保您的模型使用 SoftDeleteTrait。
use Illuminate\Database\Eloquent\SoftDeletingTrait;
class Client extends Eloquent {
use SoftDeletingTrait;
}
就我而言
\App\User::withTrashed()->findOrFail($userId)->first()
给了我错误的数据(给了授权用户数据)然后,
\App\User::withTrashed()->whereId($userId)->first()
给了我确切的数据。
否则,我相信你可以做到:
\App\User::withTrashed()->whereId($userId)->firstOrFail();
而不是\\App\\User::withTrashed()->whereId($userId)->first()
只是为了更安全。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.