Laravel 5.1 - 多列的多态关系

时间:2016-02-22 12:26:02

标签: php mysql laravel eloquent polymorphism

我有下一张桌子:

图片(id,filename ...)

页面(标题,slug ...)

用户(用户名,电子邮件...)

我创建了一个 imageables 表来保持图像关系

image_id / imageable_id / 类型(页面/用户等)

如果每个模型只需要一个图像字段,它就可以正常工作。

但是,如果我需要在一个页面中使用 header_image paragraph_image ,我该怎么办?

如果我想要一个 header_image / paragraph_image ,我可以直接在模型中保留该字段(header_image_id,paragraph_image_id),但如果我有一个顶部滑块和一个图库,该怎么办?对于这篇文章..我需要2个很多关系。

是否可以将所有这些内容保存在同一个 imageables 表中?从理论上讲,我需要另一列unicity(例如字段名称。)

1 个答案:

答案 0 :(得分:0)

我认为你没有正确地创建你的表和关系。在您的情况下,我将创建2个不同的表:具有数据透视表关系的页面和图像。

  1. 页面表:id,title,slug ...
  2. 图片表:ID,类型,文件名...
  3. 数据透视表(图像和页面):page_id,image_id。
  4. 然后,您可以简单地使用Images表的type列来设置要放置该图像的位置。您可以将类型等于标题或段落或滑块...

    $image = new Image;
    $image->type= 'header';
    $image->filename = 'yourimage.jpg';
    ...
    $image->save();
    

    在您的视图中,您可以像这样检索标题,段落,滑块所需的图像:

    $page->images()->where('type', 'header')->first();
    

    希望它有所帮助!