簡體   English   中英

Laravel雄辯的ORM關系

[英]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 ,其中imagesfood_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM