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

use*_*502 4 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();
}
Run Code Online (Sandbox Code Playgroud)

订单管理员:

/**
 * 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();
Run Code Online (Sandbox Code Playgroud)

DD($顺序); 显示一个空客户端

#relations: array:1 [
   "client_withtrashed" => null 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我决定使用上面的解决方案因为我无法使用toTrashed()来处理我的急切查询 $order = Order::with('client_withtrashed')->withTrashed()

Fab*_*nes 9

那么你不能在关系上定义它,但是你可以在急切加载时添加约束:

$order = Order::with(['client' => function ($query) {
        $query->withTrashed();
    }])
    ->where('id', '=', $id)
    ->firstOrFail();
Run Code Online (Sandbox Code Playgroud)

您可以在文档中检查急切的加载限制

编辑:

您可以在关系上定义withTrashed(),只需确保您的模型使用SoftDeleteTrait.

use Illuminate\Database\Eloquent\SoftDeletingTrait;

class Client extends Eloquent {
    use SoftDeletingTrait;

}
Run Code Online (Sandbox Code Playgroud)