Php 拉威尔雄辩的关系
这应该很简单,但我似乎不明白 有两个表格:Php 拉威尔雄辩的关系,php,mysql,orm,laravel,relational-database,Php,Mysql,Orm,Laravel,Relational Database,这应该很简单,但我似乎不明白 有两个表格: `images` |- `id` |- `path` |- `name` `foods` |- `id` |- `image_id` 和两种型号: class Image extends Eloquent { public function food() { return $this->belongsToMany('Food'); } } class Food extends Eloquent
`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');
}
}
其思想是,每个食品
都有一个图像
,通过其食品
表行中的图像id
列与之关联。单个图像
可以与多个食物关联
我希望能够在控制器中执行类似的操作:
$food = Food::with('image')->find(1);
…但是,当然,我得到了以下错误:
SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“images.food_id”(SQL:select*fromimages
whereimages
food_idin(1))
…因为雄辩者希望每个图像
都有一个食物id
。但是,当然,image
s没有food\u id
s。食品有image\u id
s
请帮助一个受挫的程序员解决问题。:)
谢谢大家!
编辑: 非常感谢你,迪尔西 我已将我的模型更新为:
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
关系
i、 例如,食物表有外键,因此它属于外键指向的任何东西
此外,对于images模型,情况正好相反,它不属于任何东西,因为不涉及外键或透视表。相反,它有许多食物
税收怎么了?
在你的例子中,语法/语法似乎有点倒退,这纯粹是因为在大多数系统中,你会期望食物有很多图像,而不是相反。这经常会变得棘手,这就是为什么总是值得忘记型号名称,只考虑谁有外键。非常感谢,伙计。工作得很好。我真的不明白为什么语法不匹配?但是,我很高兴它能起作用。酷。在大多数情况下确实如此,只是数据的结构方式与正常情况略有不同。在大多数其他系统中,你会期望食物有多个图像。如果食物有多个图像。。。我必须要第三张桌子,对吗?比如说
foods\u images
。然后,我是否还需要一个FoodImage
模型来将所有东西连接在一起?如果食物有多个图像,但图像也属于多个食物,那么是的,您需要一个透视表。我明白了,现在这是有意义的。再次感谢你,你真厉害