2017-09-22 188 views
1

帮我保存json到db。表字段类型 - 文本。 我有模型浇铸阵列Laravel 5.4将json保存到数据库

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

我想要得到的JSON这样{“指标”:“用户id”},并将其存储到数据库中。 例子:

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

我有销售组型号和“team_members”以dB为单位列保存所有用户ID属于这个团队。 我的代码通过ID查找团队,获取所有'team_members'属性并为该团队添加新用户。我希望以json格式存储所有用户并在添加新用户标识时增加索引。

销售组属性:

"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 Casting “数组将自动被序列化回JSON进行存储”

我在哪里错了?

+0

你的问题不太清楚,请补充更具体的细节?你的代码做了什么?并在哪个变量或哪行代码中获得哪个输出? – C2486

+0

在保存之前将它编码为JSON? –

回答

0

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

,你就会有这样的:

array:3 [▼ 
    0 => 1 
    1 => 34 
    2 => 56 
] 
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

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