使用 Laravel 4 使用关系数据库存储动态数据

Posted

技术标签:

【中文标题】使用 Laravel 4 使用关系数据库存储动态数据【英文标题】:Storing Dynamic Data with a Relational Database with Laravel 4 【发布时间】:2014-04-22 15:28:21 【问题描述】:

我想知道如何存储动态表单中的数据,它可能有 10 个变量或 100 个变量,具体取决于用户,并且仍然利用 Laravel 的关系数据库功能?通常我只会序列化表单,但这似乎会浪费 Laravel 的很多潜力。对此的任何和所有想法将不胜感激!非常感谢你们!

【问题讨论】:

【参考方案1】:

序列化的几种替代方案:

    使用 SQL:使用 JSON 对象。您可以在模型中包含逻辑以 解析/生成该 JSON 对象。例如,

    $model->fill(json_decode($jsonified_array, true)) 将允许 雄辩的模型表现得好像它只是抓住了一堆字段 从一张桌子。

    使用 NoSQL:您可以尝试类似 MongoDB bundle for Laravel 的方法。 MongoDB 是一种面向文档的 DMS,是关系数据库(例如 作为 SQL)。它更适用于“非结构化”数据,例如什么 你在描述。它与将数据存储在 JSON 对象中极为相似,但采用二进制级别,效率更高。

个人推荐选项#1,因为我通常需要使用关系数据库,但这取决于您的程序要求和您的个人喜好。

【讨论】:

太棒了,这听起来是个很棒的计划,我很感激。 抱歉,快速提问。如果我的表单是动态的并且会改变大小和变量,我如何将它转换为 JSON 对象?以前从未使用过 JSON,也找不到这个答案。 @gv0029 json_encode($_POST) 在表单操作的 php 脚本中应该可以解决问题。 @gv0029 不确定您要在那里做什么。 Form::open 中的 Json_encode 不会做任何事情。只需将 json_encode(Input::all())) 放入 order-create-post 处理程序中即可对表单数据进行 json 化。 @gv0029 这就是为什么我改变了我的建议,使用 Input::all() 而不是 $_POST,很确定这些不会出现在 laravel Input 数组中。如果有,只需使用 Input::except() 删除不需要的。

以上是关于使用 Laravel 4 使用关系数据库存储动态数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 laravel 4 上的循环将数据数组存储到单个数组中

Laravel:模型中的动态关系

使用 jQuery post 使用 Laravel 将动态数据传递给引导模式

Laravel 8.x - 使用 Eloquent 关系存储数据

laravel 观察器 模型绑定 方法的关系

Laravel eloquent 如何动态创建关系?