我试试这个
数据库中的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?
结果应该是一个数组
我在演员模型中设置了数组
我该如何解决这个问题?
答案 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);
}