【问题标题】:Laravel 5.4 save json to databaseLaravel 5.4 将 json 保存到数据库
【发布时间】:2018-03-04 01:03:48
【问题描述】:

帮助我将 json 保存到数据库。表字段类型 - 文本。 我有带有强制转换数组的模型

class Salesteam extends Model 
{
    protected $casts = [        
        'team_members' => 'array'
    ];
}

我想得到这样的 json {"index":"userId"} 并将其存储到 db。 示例:

{"1":"7","2":"14","3":"25","4":"11"}

我在数据库中有 Salesteam 模型和“team_members”列来保存所有用户 ID 属于这个团队。 我的代码通过 id 查找团队,获取所有 'team_members' 属性并将新用户添加到该团队。我希望在添加新用户 ID 时以 json 格式存储所有用户并递增索引。

Salesteam 属性:

"id" => 20
"salesteam" => "Admin"
"team_leader" => 0
"invoice_target" => 884.0
"invoice_forecast" => 235.0
"team_members" => "[1,66,71]"
"leads" => 0
"quotations" => 0
"opportunities" => 0
"notes" => ""
"user_id" => 1
"created_at" => "2017-09-22 09:13:33"
"updated_at" => "2017-09-22 13:10:25"
"deleted_at" => null

将新用户添加到团队的代码:

$salesTeam = $this->model->find($salesTeamId);
$teamMembers = $salesTeam->team_members;
$teamMembers[] = $userId;
$salesTeam->team_members = $teamMembers;
$salesTeam->save();

但它存储到 db 数组并且没有索引

"team_members" => "[1,34,56]"

来自 Laravel 文档 - Array & JSON Casting“数组将自动序列化回 JSON 进行存储”

我哪里错了?

【问题讨论】:

  • 您的问题不清楚,请补充更具体的细节?你的代码是做什么的?以及您在哪个变量或代码行中获得了哪个输出?
  • 在保存之前将其编码为 JSON?

标签: php json laravel


【解决方案1】:

制作这样的json字符串

{"1":"7","2":"14","3":"25","4":"11"}

php 中,当您将元素推送到数组时,您必须传递一个键。例如

$teamMembers = [];
$teamMembers['1'] = 7;
$teamMembers['2'] = 14;
...

如果你不将其设为associative arrayphp 将在转换为 json 字符串时将其视为 json 数组..

提示:您可以只传递一个键,它也可以工作。 例如

$test = [1, 2, 3, 4, 5, 6];

$test['10'] = 56;

echo json_encode($test);

输出:

"{"0":1,"1":2,"2":3,"3":4,"4":5,"5":6,"10":56}"

PHP-Reference

【讨论】:

    【解决方案2】:

    简单使用

    $teamMembers = json_encode($salesTeam->team_members);
    

    应该就是这样了。

    【讨论】:

      【解决方案3】:

      如果你得到这个"[1,34,56]",就做json_decode($team_members)

      你会得到这个:

      array:3 [▼
        0 => 1
        1 => 34
        2 => 56
      ]
      

      【讨论】:

        【解决方案4】:

        简单的解决方案

        $books = App\Book::all();
        $user->books = $books->toJson();
        $user->save(); //example: userid -> 2
        
        $user = App\User::find(2);
        $userBooks = json_decode($user->books, true); // to generate object again
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-21
          • 2016-12-13
          • 1970-01-01
          • 2014-08-21
          • 1970-01-01
          • 2013-04-06
          相关资源
          最近更新 更多