我試圖用查找表使用2個表之間的「belongsToMany」關係來定義多對多關係。這些都是我的表:Laravel belongsToMany不工作
encounter_templates(EncounterTemplate模型)
- ID
- TEMPLATE_NAME
- ...(更多不相干的colums)
encounter_forms(EncounterForm模型)
- id
- FORM_NAME
- ...(更多不相干的colums)
encounter_templates_forms(EncounterTemplateForm模型)
- ID
- template_id
- form_id
在EncounterTemplate模型我試圖附加的屬於它形成了一個列表,所以我有以下內容的形式()函數:
public function forms() {
return $this->belongsToMany('\App\EncounterForm', 'encounter_templates_forms', 'template_id', 'form_id');
}
但是它返回一個空的對象。我可以通過使用以下代替工作得到它的工作:
$forms = \App\EncounterTemplateForm::where("template_id",$this->id)
->join("encounter_forms", "encounter_templates_forms.form_id","=","encounter_forms.id")
->get();
return $forms;
但我想知道我做錯了我的關係聲明。如果可以的話,我寧願按照「適當」的Laravel方式來做。希望有任何見解。
編輯:如果我運行EncounterTemplate ::發現(1) - >形式() - > toSql()我得到以下查詢:
select * from `encounter_forms` inner join `encounter_templates_forms` on `encounter_forms`.`id` = `encounter_templates_forms`.`form_id` where `encounter_templates_forms`.`template_id` = 1
它返回預期的結果...所以也許問題爲進一步向下游...
你是對的文檔表明它應該是另一種方式,這是我最初如何嘗試它,但不幸的是我嘗試了兩種變化,似乎都沒有工作。我已經編輯了我的帖子來反轉列名稱(並且再次運行我的代碼,並將其顛倒過來以便三重檢查我是否會發瘋),但它仍然無效。 – user3246127
@ user3246127嘗試預覽SQL,看看發生了什麼'EncounterTemplate :: find(1) - > forms-> toSql();'這裏假定你有一個具有表單的模板1。 – James
它返回正確的查詢和運行該查詢原始返回預期的結果,所以也許問題是在我的項目進一步下游的地方。當我弄明白時,我會更新這個問題! – user3246127