繁体   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