Laravel Mongo Many To Many relation wherehas not working

匿名 (未验证) 提交于 2019-12-03 01:38:01

问题:

I have two mongo documents that are related to each other in a many to many relationship. One is called Lawyer and the other LawCase.

My Lawyer model has:

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

My LawCase model has:

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

All I am trying to do is find lawyers that have a certain category of law cases.

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

This gets nothing even though I have lawcase documents that have a category of 'DUI'.

When I do

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

That gets me a result set. Just having some issues with wherehas. What am I missing?

I tried researching the issue but looks like others may have similar issue:

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

If whereHas would not work, how would you get about doing this?

UPDATE:

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

My LawCase Document

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

回答1:

Here is the correct way to do it, this will return the lawyers who have cases that match the category DUI.

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


回答2:

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

put the foriegn key in your relationships

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


回答3:

Apparently conversion is not right (if it even exists?).
So set keys manually:

Case model:

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

Lawyer model:

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

Note that we need two-way relation meaning layer_ids in Case model, and case_ids in Lawyer model (database entries).

Using attach should update both tables properly, for example:

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

(We need corresponding ids in both tables in order for relations to display properly)



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!