kra*_*tos 7 laravel mongodb-query aggregation-framework laravel-eloquent
我有两个mongo文档,它们在多对多关系中彼此相关.一个叫做律师,另一个叫LawCase.
我的律师模型有:
public function cases()
{
return $this->belongsToMany('App\LawCase');
}
Run Code Online (Sandbox Code Playgroud)
我的LawCase模型有:
public function lawyers()
{
return $this->belongsToMany('App\Lawyer');
}
Run Code Online (Sandbox Code Playgroud)
我所要做的就是找到有某类法律案件的律师.
$lawyers = App\Lawyer::whereHas('cases', function($q){
$q->where('category', '=', 'DUI');
})->get();
Run Code Online (Sandbox Code Playgroud)
即使我有一个具有'DUI'类别的lawcase文档,这也一无所获.
当我做
$lawyers = App\Lawyer::with('cases')->get();
Run Code Online (Sandbox Code Playgroud)
这让我得到了一个结果集.只是遇到了一些问题.我错过了什么?
我试过研究这个问题,但看起来其他人可能有类似的问题:
Laravel + Jenssegers\Mongodb:'WhereHas'和'Has'返回空集合
如果哪里不起作用,你会怎么做到这一点?
更新:
My Lawyer Document
{
"_id" : ObjectId("5945f88c9a89205aae0efea8"),
"full_name" : "Some Name ",
"active" : true,
"updated_at" : ISODate("2017-06-18T03:50:36.849+0000"),
"created_at" : ISODate("2017-06-18T03:50:36.849+0000"),
"law_case_ids" : [
"5945f88c9a89205aae0efea9",
"5945f88c9a89205aae0efeac",
"5945f8b59a89205aae0f3f81",
"5955d0ff9a89200a57340db8"
]
}
Run Code Online (Sandbox Code Playgroud)
我的LawCase文件
{
"_id" : ObjectId("5945f88c9a89205aae0efe9a"),
"category" : "DUI",
"updated_at" : ISODate("2017-06-18T03:50:36.825+0000"),
"created_at" : ISODate("2017-06-18T03:50:36.821+0000"),
"lawyer_ids" : [
"5945f88c9a89205aae0efe99"
]
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法,这将返回有与类别匹配的案件的律师DUI。
$lawyers = App\Lawyer::with(['cases'=> function($q){
$q->where('category', '=', 'DUI');
}])->get();
Run Code Online (Sandbox Code Playgroud)