【问题标题】:Cross reference table laravel 5交叉引用表 laravel 5
【发布时间】:2015-10-08 09:50:12
【问题描述】:

假设有三个表:

类别

id

图像类别

image_id
category_id

图片

id

我的想法是图像具有多个类别,因此我制作了一个交叉引用表以将类别附加到图像。在我的交叉表 (image_categories) 中,我使用 image_id 对图像表和 category_id 对类别表创建引用

现在我需要找到属于某个类别的所有图像,因此在我的类中添加类别。

public function images(){
    return $this->hasManyThrough('App\Image', 'App\ImageCategory');
}

但我收到一个错误,提示找不到该列。

 Unknown column 'image_categories.id' in 'on clause' (SQL: select `images`.*,
`image_categories`.`subcategory_id` from `images` inner join `image_categories`
on `image_categories`.`id` = `images`.`image_category_id` where 
`image_categories`.`subcategory_id` = 29)

如果我查看它说的文档:

经历过很多次

“有很多通过”关系提供了一个方便的捷径 通过中间关系访问远距离关系。例如, 一个 Country 模型可能有很多 Post through 一个 User 模型。桌子 因为这种关系看起来像这样:

这听起来很适合这种情况,但我做错了什么?

【问题讨论】:

  • 你确定表 images 有 image_category_id 列并且 image_categories 有 id 吗?再次检查
  • @Akam 不,我的想法是图像具有多个类别,因此我制作了一个交叉引用表以将类别附加到图像。所以在我的交叉表(image_categories)中,我使用 image_id 对图像表和 category_id 对类别表创建了一个引用。

标签: php sql eloquent laravel-5


【解决方案1】:

如果 category 有多个 images 并且 image 有多个 categories,那么这里有一个 多对多关系,您的数据透视表的名称将是category_image(Eloquent 将按字母顺序连接两个相关的模型名称)并且它应该包含两个表的两个 ID 为 foreign key(您如果需要,可以在表格中添加更多参数)。

所以只要按照 laravel 文档中的说明操作 Many To Many 就可以顺利运行了。

注意:如果您需要查找属于某个类别的所有图像,请在您的类Category 中定义images() 函数,如下所示:

public function images(){
     return $this->hasMany('App\Image');
}

【讨论】:

  • 非常感谢,一个离题的问题。 laravel 如何知道复数(类别-> 类别)是否有内置字典?对于一个项目,我使用不同的语言。
  • 我不得不使用belongsToMany而不是hasMany,但感谢您的链接。
  • 随时欢迎你们。对于复数,他们使用Illuminate\Support\Pluralizer.php 类,如果你愿意,阅读源代码,你会发现它实际上是如何工作的。当您使用不同的语言时,请参阅 Pluralization in Localization
  • 嗨@Sveb B,您可以提出修改建议,我会接受,提前谢谢您。
猜你喜欢
  • 1970-01-01
  • 2021-09-17
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多