繁体   English   中英

Eloquent withtrashed() 用于在急切加载查询上进行软删除 - Laravel 5.1

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM