【问题标题】:Dynamic tables and models in Laravel 5Laravel 5 中的动态表和模型
【发布时间】:2015-08-22 17:27:55
【问题描述】:

我有下一张桌子:

pages
    id
    title
    ...

dynamic_table_1_infos
    id
    page_id
    image_id
    dynamic_field_1
    dynamic_field_2
    ...

dynamic_table_2_infos
...

因此存在“一对多”关系。

有没有什么方法可以使用通用方法,而无需为每个表“即时”创建 DynamicTable[No]Info 模型?

如果我在这些模型中需要一些额外的方法怎么办?

“页面”模型将与“dynamic_table_[no]_infos”表有许多关系。所以我可能需要一个通用的方法来做到这一点。 (有很多dynamic_table_1_infos / 有很多dynamic_table_2_infos ...)

我正在尝试做的事情是以某种方式受到 Dupal 的内容类型的启发。

【问题讨论】:

  • 当我不确定数据的结构时,我所做的就是将其全部存储为 JSON。这可以解决你的问题。这在 Laravel 或 PHP 中很棒,因为您可以将 JSON 解析为对象。但是,我很确定这是不好的做法。无论如何,您可以创建一个整体 dynamic_info 表,然后只包含列 idpage_id,最后是 data 列,您可以在其中将动态数据存储为 JSON。

标签: php mysql laravel eloquent laravel-5.1


【解决方案1】:

如果您想根据某个模型属性的值将单个模型数据保存到多个表中,则需要覆盖模型的 getTable() 方法以返回它的表名称应该写信给。

我不确定你想如何决定 Eloquent 应该保存到哪个表 - 例如,如果你的模式中有一个名为 segment 的属性,你可以这样做:

public function getTable() {
  return 'dynamic_table_' . $this->segment . '_infos';
}

【讨论】:

  • 动态模型可以具有例如 image_id(也动态添加)。该模型将“动态”创建,我需要“动态”在其中添加关系,而不是手动编辑它。 (“image id”属于“Image”模型)。
  • 我不知道你需要什么。你能再贴一些例子吗?并告诉我为什么你需要这种非标准的行为?
  • 我想要构建的东西在某种程度上受到了 Drupal 的内容类型的启发。在我的情况下,每种内容类型都有一个自定义表格(带有 x 字段的文章/带有 y 字段的产品等)。手动很容易,但我想有一个管理界面。因此,当我添加内容类型时,我可以创建 dynamic_table_1_infos、2、3 等。我什至可以使用 Artisan 命令创建模型,但我不知道如何建立关系。例如,动态表可以具有来自图像表的图像引用。
猜你喜欢
  • 2016-09-25
  • 1970-01-01
  • 2022-10-06
  • 2015-08-16
  • 2016-02-15
  • 2016-11-04
  • 1970-01-01
  • 2015-08-08
相关资源
最近更新 更多