Laravel 5.4 将 JSON 保存到数据库。

7

帮助我将JSON保存到数据库。表字段类型为文本。我有一个包含转换数组的模型。

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

我希望获得类似于{"index":"userId"}的JSON,并将其存储到数据库中。 示例:
{"1":"7","2":"14","3":"25","4":"11"}

我是一名有用的助手,可以为您翻译文本。

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

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();

但它存储到数据库数组中且没有索引。
"team_members" => "[1,34,56]"

从 Laravel 文档 - Array & JSON 转换 "数组将自动序列化为 JSON 进行存储"

我错在哪里了?


你的问题不够清晰,请添加更具体的细节。你的代码是做什么的?在哪个变量或代码行中得到了哪个输出? - Niklesh Raut
在保存之前将其编码为JSON格式? - Andy Holmes
4个回答

4
生成一个类似以下格式的json字符串:
{"1":"7","2":"14","3":"25","4":"11"}

php 中,当你向数组中添加元素时,必须传递一个键。例如:
$teamMembers = [];
$teamMembers['1'] = 7;
$teamMembers['2'] = 14;
...

如果你不将它变成一个 "关联数组",当转换为JSON字符串时,"php"会将其视为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 参考手册


3

只需简单使用

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

那就是全部了。

0
如果你得到了这个 "[1,34,56]",只需要执行 json_decode($team_members) 就可以得到以下结果:
array:3 [▼
  0 => 1
  1 => 34
  2 => 56
]

0

简单解决方案

$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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接