【发布时间】:2020-04-13 09:31:16
【问题描述】:
仍在 Laravel 中练习。此时,我有一个页面控制器,它可以找到相应页面可用的所有部分(简单的 HTML 部分)并将它们包含在刀片中,如下所示:
@foreach(@sections as @section)
@include('sections.' . $section->filename)
然后我有一个 sections 表,其中包含相应部分的数据,还有一个 columns 列,其中包含 JSON 数据,如下所示:
{"header":"Section column 1", "text":"bruh?", "image_id":""},
{"header":"Section column 2", "text":"bruh?", "image_id":""},
{"header":"Section column 3", "text":"bruh?", "image_id":"7"}
如您所见,image_id 应该使用 Eloquent 关系从images 表中调用文件名(我假设它将是一对多)。
是的,我知道将 JSON 存储在表中并不是最好的解决方案(尤其是如果您想从中交叉请求数据),但这是我想出的最好的解决方案。
所以,问题是:如何仅使用来自 JSON 对象的 ID 获取图像的文件名 或 除了 JSON 之外是否有任何不同的解决方案?
附: columns table 和 JSON 格式用于定义一些属性,因为我的一些部分有 3-9 个文本列 (col-md-3),并且每个部分都有不同的标题、文本和图像,所以我将它们存储在 JSON 中.
P.P.S.我的 JSON 格式是有效的,我只是删除了一些格式以保持这个问题清晰。
【问题讨论】:
-
获取 JSON 数据。使用 json_decode() 转换为数组。从中提取“image_id”并进行查询。
-
我的建议是将此“部分”JSON 数据移动到另一个表中。结果将是组织更好的代码、更清晰的解决方案和更好的性能(更好)。
-
@DanielPetrovaliev 附加查询不是比 json_decode 慢吗?而且我有点坚持逻辑 - 对于一个部分,我有 3-9 列,每列可能有它自己的图像,另外 - 每个部分也可能有它的图像。
-
@ArtemUshakov 如果您对每个对象使用 json_decode ,您将不得不为每个部分运行查询以获取图像并且会有 n+1 问题,但如果您有一个额外的表,您可以获得所有一个查询中的数据。这是我的想法。