[英]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.