Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉威尔雄辩的关系_Php_Mysql_Orm_Laravel_Relational Database - Fatal编程技术网

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*from
images
where
images
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
模型来将所有东西连接在一起?如果食物有多个图像,但图像也属于多个食物,那么是的,您需要一个透视表。我明白了,现在这是有意义的。再次感谢你,你真厉害