【问题标题】:Laravel: Storing an array of 3 strings inside one column of a tableLaravel:在表格的一列中存储一个由 3 个字符串组成的数组
【发布时间】:2021-10-09 17:36:02
【问题描述】:

我想知道实现这一目标的最佳方法是什么。我需要存储一个数组,例如:

['hello', 'world', 'love']

在表格的一列内。我不想创建一个新表,其中数组中的每个值都成为单独的行。有没有更好的办法?我想我最关心的是性能。

因此,在为该列创建迁移时,理想情况下,我会插入一个具有 3 个默认/可为空值的数组。然后我可以在我的应用程序需要时为数组设置实际值。

简单场景:我有一个名为desk 的表,我想在桌面上存储 3 个项目,例如['pencil', 'ruler', 'stapler'],但我不想创建一个单独的表desk_items每个项目的行。希望这是有道理的。

使用 Laravel 和 MYSQL

谢谢。

【问题讨论】:

  • 我不会为您完成所有工作,但我建议您查看以下内容: 1. 将数组作为 JSON 存储在数据库中。 2. Laravel 的属性“铸造”。
  • 旁注。如果您关心的是性能,请记住,在该数组中查找具有特定元素的行的查询将比您将它们作为相关表中的行慢得多
  • 是的,一直在阅读,hasMany 关系可能是最好的方式?
  • 这取决于您的用例,但是对于将一行与一组特定于该行的值的简单关联,hasMany 关系是最好的方法。

标签: mysql laravel


【解决方案1】:

将 desc 表设为 jsonb 格式

$table->jsonb('desk');

在模型中使用演员表

protected $casts = [
    'desk' => 'array',
];

【讨论】:

    【解决方案2】:

    如果您想将数组存储在数据库表中,您应该使用json_encode 发送它。

    $data = new Data; 
    $data->Name = json_encode($request->DataName);
    $data->save();
    

    因此,您可以在数据表的名称列中存储一个数组。 要使用此数据,您需要使用 json_decode 调用数据。

     $data = json_decode(Data::find(1)->Name);
    

    【讨论】:

    • @Etra 这不是 Laravel 的最佳选择。无论您在何处输出此数据,您都必须始终执行 json_decode
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2021-05-24
    • 1970-01-01
    相关资源
    最近更新 更多