php - Laravel 5.1 - 多列的多态关系

标签 php mysql laravel eloquent polymorphism

我有下一张 table :

图像(id、文件名...)

页面(标题、slug ...)

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

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

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

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

但是,如果我需要在一页中使用 header_imageparagraph_image 等示例,我应该如何进行?

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

是否可以将它们全部保存在同一个imageables表中?理论上,我需要另一列用于唯一性(例如字段名称。)

最佳答案

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

  1. 页面表:id、标题、slug...
  2. 图像表:ID、类型、文件名...
  3. 数据透视表(图像和页面):page_id、image_id。

然后您可以简单地使用图像表的类型列来设置要放置该图像的位置。您可以将类型设置为标题、段落或 slider ...

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

在您的 View 中,您可以检索您想要的标题、段落、 slider 的图像,如下所示:

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

希望对你有帮助!

关于php - Laravel 5.1 - 多列的多态关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35553642/

相关文章:

php - Google 缓存仅显示页眉和页脚。跳过正文内容

javascript - 提交时将 php 字符串发送到 javascript

php - 笑脸助手代码点火器

javascript - PHP 中的子资源完整性和缓存破坏技术

php - 检查密码值是否相同

php - 同步本地和远程数据库

javascript - 公共(public)文件夹中的 Laravel CSS 和 JS 显示 404 错误

php - Laravel Carbon 如何在不改变小时的情况下改变时区

php - PDO mySql 查询在调用时第二次没有在 for 循环中执行

php - App Engine 标准 : The/srv/bootstrap/cache directory must be present and writable 上的 Laravel