Laravel Mongo很多很多关系都没有工作

时间:2017-09-03 12:14:58

标签: laravel mongodb-query aggregation-framework laravel-eloquent

我有两个mongo文档,它们在多对多的关系中彼此相关。一个叫做律师,另一个叫LawCase。

我的律师模型有:

public function cases()
    {
        return $this->belongsToMany('App\LawCase');
    }

我的LawCase模型有:

public function lawyers()
    {
        return $this->belongsToMany('App\Lawyer');
    }

我所要做的就是找到有某类法律案件的律师。

$lawyers = App\Lawyer::whereHas('cases', function($q){
                            $q->where('category', '=', 'DUI');
                            })->get();

即使我有一个类别为“DUI”的lawcase文档,也没有任何结果。

当我这样做时

$lawyers = App\Lawyer::with('cases')->get();

这让我得到了一个结果集。只是遇到了一些问题。我错过了什么?

我尝试研究这个问题,但看起来其他人可能有类似的问题:

Laravel + Jenssegers\Mongodb: 'WhereHas' and 'Has' returns empty collection

如果whereHas不起作用,你会怎么做呢?

更新:

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"
    ]
}

我的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"
    ]
}

3 个答案:

答案 0 :(得分:3)

这是正确的方法,这将返回具有与DUI类别匹配的案例的律师。

$lawyers = App\Lawyer::with(['cases'=> function($q){
                            $q->where('category', '=', 'DUI');
                            }])->get();

答案 1 :(得分:1)

return $this->belongsToMany('App\LawCase');

将foriegn键放在你的关系中

return $this->belongsToMany('App\LawCase', 'foreign_key');

答案 2 :(得分:0)

显然转换是不正确的(如果它甚至存在吗?)。
因此,请手动设置键:

案例模型:

public function lawyers()
{
    return $this->belongsToMany('App\Lawyer', null, 'case_ids', 'lawyer_ids');
}

律师模型:

public function cases()
{
    return $this->belongsToMany('App\LawCase', null, 'lawyer_ids', 'case_ids');
}

请注意,在Case模型中,我们需要双向关系,layer_ids,在Lawyer模型中,需要双向case_ids(数据库条目)。

使用附件应该正确更新两个表,例如:

$lawyer->cases()->attach($case->id)

(为了使关系正确显示,我们在两个表中都需要相应的ID)