Laravel Eloquent 关系 - 不根据条件获取
Posted
技术标签:
【中文标题】Laravel Eloquent 关系 - 不根据条件获取【英文标题】:Laravel Eloquent Relationship - not fetching based on condition 【发布时间】:2021-12-08 23:11:22 【问题描述】:我想从满足条件的User
表中获取所有id
和name
,Orders
表中的order_userId
== id
中的User
表和order
和@98765439 Orders
表的 @ 列的值分别为 false
和 null
。如果来自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 Query 包含枢轴和关系