Eloquent withtrashed()用于急切加载查询的软删除 - Laravel 5.1

时间:2015-11-24 17:29:16

标签: laravel laravel-5

我尝试使用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()

2 个答案:

答案 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()

给我确切的数据。