如何在模型上制作laravel铸造阵列?

时间:2017-08-03 03:48:12

标签: php arrays json laravel laravel-5.3

我试试这个

数据库中的voting_detail的数据类型是json

我的模特是这样的:

<?php
class Store extends Model{  
    protected $fillable = [ ...,'votes_detail',...];
    protected $casts = [
        'votes_detail' => 'array',
    ];
}

我的控制器是这样的:

$store = Store::find($id)
$votes_detail = $store->votes_detail;
dd($votes_detail);

dd($ votes_detail)的结果是:

  

{&#34; 1&#34;:&#34; 1&#34;,&#34; 5&#34;:&#34; 2&#34;}

为什么结果仍然是json?

结果应该是一个数组

我在演员模型中设置了数组

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您可以使用toArray()函数将数据转换为数组,从而轻松完成此操作。所以它应该像

$store = Store::find($id)->toArray();

// $ store包含一个数组。

$votes_detail = $store['votes_detail'];

让它dd($votes_detail)并获得你想要的结果。

答案 1 :(得分:0)

我认为您将json_encode()之后的数组数据存储到迁移中未定义为json()的列,如:

$table->text('votes_detail');

$table->integer('votes_detail');

似乎您已将votes_detail定义为字符串,数字或其他内容。

这就是你的问题背后的原因。因此,在迁移中将列类型定义为json,如:

$table->json('votes_detail');

然后刷新您的迁移,您在模型中的投射将起作用,您将获得所需的阵列。

答案 2 :(得分:0)

您可以使用Laravel accessors。在您的模型中定义一个名为getVotesDetailAttribute($details)的方法:

public function getVotesDetailAttribute($details)
{
    return json_decode($details, true);
}

然后当你打电话给$store->votes_detail时,你会得到预期的结果。

之后,您可以使用mutators将数组保存回数据库,将数组转换回JSON。按如下方式定义方法setVotesDetailAttribute($value)

public function setVotesDetailsAttribute($value)
{
     $this->attributes['votes_detail'] = json_encode($value);
}