我有三个实体Inbox , Document , Category
收件箱与文档有关,文档有很多类别,
我有一个雄辩的查询,它检查收件箱和文档之间的关系并返回包含文档数据的收件箱,
问题是: 我只想在文档没有类别的情况下列出所有包含文档数据的收件箱(如果文档具有一个或多个类别,我不想在收件箱中列出此文档)。
所以我现在有这个查询,不能正常工作:
public static function getUserAndJobPositionsInbox($id, $type)
{
return self::with(['documents' => function($q){
$q->has('categories', '==', 0);
}])->where('inboxable_id', $id)
->where('inboxable_type', $type)->get();
}
如果文档没有类别,此查询将返回没有文档的收件箱数据
但是如果文档没有类别,我不希望收件箱数据。只需返回空
结果是:
{
"data": {
"user_inbox_documents": null,
"job_positions_documents": [
[
{
"id": 2,
"document_id": 3,
"document_reference": "RPL2p",
"inboxable_id": 3,
"inboxable_type": "App\\Models\\JobPosition",
"path_id": "2",
"created_at": "2018-09-12 13:21:23",
"updated_at": "2018-09-12 13:21:23",
"documents": []
}
],
[
{
"id": 1,
"document_id": 3,
"document_reference": "RPL2p",
"inboxable_id": 2,
"inboxable_type": "App\\Models\\JobPosition",
"path_id": "1",
"created_at": "2018-09-12 13:21:23",
"updated_at": "2018-09-12 13:21:23",
"documents": []
}
]
]
}
}
谢谢。
答案 0 :(得分:0)
您可以使用点(。)来检查嵌套关系的存在,例如以下代码(Laravel文档)获取所有具有至少一个评论且该评论应具有至少一票的职位。
// Retrieve all posts that have at least one comment with votes...
$posts = App\Post::has('comments.votes')->get();
因此在上面的示例中,您可以按以下方式修改代码:
public static function getUserAndJobPositionsInbox($id, $type)
{
return self::has('documents.categories')
->where('inboxable_id', $id)
->where('inboxable_type', $type)->get();
}