Laravel Eloquent 关系 - 不根据条件获取

Posted

技术标签:

【中文标题】Laravel Eloquent 关系 - 不根据条件获取【英文标题】:Laravel Eloquent Relationship - not fetching based on condition 【发布时间】:2021-12-08 23:11:22 【问题描述】:

我想从满足条件的User 表中获取所有idnameOrders 表中的order_userId == id 中的User 表和order 和@98765439 Orders 表的 @ 列的值分别为 falsenull。如果来自User 表的数据没有检查我指定的where 条件,则下面的代码将返回所有行。我该如何解决这个问题?

$data = User::with(['orders'=>function ($query)
            $query->where('order', false);
            $query->whereNull('uploadId');
        ])->pluck('name', 'id');

用户模型

public function orders()

    return $this->belongsTo(Orders::class, 'order_userId', 'id');

上面的代码给出的输出如下:

    
        "id": 2,
        "name": "jen",
        "orders": null
    ,
    
        "id": 3,
        "name": "jos",
        "orders": null
    

【问题讨论】:

【参考方案1】:

试试

$data = User::whereHas('orders', function ($query) 
    $query->where('order', false);
    $query->whereNull('uploadId');
)->pluck('name', 'id');

【讨论】:

【参考方案2】:

试试这个解决方案:

正确的关系是,用户有很多订单

用户模型:

public function orders()

    return $this->hasMany(Orders::class, 'order_userId', 'id');

【讨论】:

我试过这个。它仍然返回甚至不满足我在订单关系中指定的 where 条件的所有数据行。意思是,我只想获取满足条件 order = false & uploadId=null 的用户表行【参考方案3】:

也检查一下..

$data = User::whereHas('orders', function ($query) 
    $query->where([['order', false],['uploadId','>',0]]);
)->pluck('name', 'id');

【讨论】:

以上是关于Laravel Eloquent 关系 - 不根据条件获取的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent 根据数据透视表字段条件获取多对多关系

如何查询 Laravel Eloquent 的 belongsTo 关系?

Laravel Eloquent,仅选择存在关系的行

Laravel Eloquent Query 包含枢轴和关系

如何在 Laravel 中使用多表查询而不使用 Eloquent 关系

Laravel/Eloquent - 创建与可能具有或不具有属性的父模型相关的多个子模型的关系