[英]Laravel Eloquent ORM Relationship
這應該真的很簡單,但是我似乎無法弄清楚。
有兩個表:
`images`
|- `id`
|- `path`
|- `name`
`foods`
|- `id`
|- `image_id`
和兩個模型:
class Image extends Eloquent {
public function food() {
return $this->belongsToMany('Food');
}
}
class Food extends Eloquent {
public function image() {
return $this->hasOne('Image');
}
}
這個想法是,每種food
都有一個通過其foods
表行中的image_id
列與之關聯的image
。 單個image
可以與多種食物相關聯。
我希望能夠在控制器中執行以下操作:
$food = Food::with('image')->find(1);
...但是,當然,我得到以下錯誤:
未發現柱::SQLSTATE [42S22] 1054未知列'images.food_id'在'where子句'(SQL:SELECT * FROM images
,其中images
。 food_id
中(1))
...因為food_id
希望每個image
都有一個food_id
。 但是,當然, image
沒有food_id
。 食物有image_id
。
請幫助沮喪的編碼器。 :)
謝謝!
編輯:
非常感謝,決斗。
我已經將模型更新為:
class Image extends Eloquent {
public function food() {
return $this->hasMany('Food');
}
}
class Food extends Eloquent {
public function image() {
return $this->belongsTo('Image');
}
}
...現在, Food::with('image')
調用起作用了。
我確實不明白為什么“食物”屬於“圖像”……也許有人可以解釋為什么語法與此處的語法不匹配?
從語法上來說,它應該是hasOne
關系,但數據的設置方法實際上是一個belongsTo
關系。
即,食物表具有外鍵,因此它belongs to
外鍵指向的任何對象
此外,對於圖像模型而言,逆是成立的,因為它不涉及外鍵或數據透視表,所以它不belong to
任何東西。 相反,它has many
食物
在您的情況下,語法/語法似乎有些倒退,這純粹是因為在大多數系統中,您期望食品具有許多圖像,而不是相反。 它常常會變得棘手,這就是為什么總是值得忘記模型名稱,而只是思考誰擁有外鍵的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.