假设我只想在user.status为true时获取所有用户及其帖子。
如何实现这一点使用渴望加载(即与)
我想得到的数据:
{
"users": [
{
"id": 1,
"status": false
},
{
"id": 2,
"status": false
},
{
"id": 3,
"status": true,
"posts": [
{
"id": 1,
"comment": "abc"
},
{
"id": 2,
"comment": "abc"
},
{
"id": 3,
"comment": "abc"
}
]
}
]
}
3条答案
按热度按时间2fjabf4q1#
通过加载所有用户,然后筛选想要加载的用户,最后即时加载它们的关系,可以轻松地实现这一点。
vohkndzv2#
如果你正在使用一个相当现代的Laravel版本,你可能想看看API资源上的文档:
https://laravel.com/docs/7.x/eloquent-resources
条件关系文档
试试这样的方法:
hpxqektj3#
我遇到了一个类似的问题,我需要使用
with
方法来加载相关数据,但我也想进一步过滤它,比如使用where
方法。不幸的是,with
方法不直接支持这种过滤。所以,我必须说,解决办法有点棘手。要解决此限制,可以在模型中使用
selectRaw
方法创建自定义别名,并使用此别名建立所需的关系。在您的特定场景中,您可以尝试以下代码:
这段代码创建了一个名为
idx
的别名。如果用户的status
为FALSE
,则将idx
设置为null
,否则使用id
。接下来,您可以在User模型中像这样定义关系:
这意味着,如果
users.status is FALSE
,idx
将是null
。另一方面,如果users.status is TRUE
,idx
将具有id
的值。因此,对comments表的后续查询将使用idx作为相关键。