检索列时,我希望将其作为数组获取,但是它以字符串形式返回。
迁移
$table->text('balance')->nullable();
在模型上(根据Laravel文档)
protected $casts = [
'balance' => 'array',
];
将数据保存到余额列时
$exchange = Exchange::findOrFail($id);
$exchange->balance = json_encode($balance);
$exchange->save();
检索模型时
$exchanges = Exchange::orderBy('title')->get();
在视图中
foreach($exchanges as $ex)
echo gettype($ex->balance) // This returns string, not an array
endforeach
我很困惑为什么它仍然是字符串,而应该是数组。在迁移过程中,我也尝试使用json
而不是text
列类型,结果相同。
答案 0 :(得分:1)
如果您将模型配置为将属性强制转换为array
,则在尝试存储它时无需将其转换回json
,Laravel会为您处理。来自docs:
Array & JSON Casting
...
定义了强制类型转换后,您可以访问
options
属性,然后 它将自动从JSON反序列化为PHP数组。什么时候 您设置options
属性的值,给定数组将 自动序列化回JSON 进行存储:$user = App\User::find(1); $options = $user->options; $options['key'] = 'value'; $user->options = $options; $user->save();
所以在您的情况下:
$exchange = Exchange::findOrFail($id);
$exchange->balance = ['your', 'values', 'as', 'an', 'array'];
$exchange->save();
答案 1 :(得分:0)
您可以删除演员表并在Exchange
模型上实现accessor方法:
public function getBalanceAttribute($value)
{
return json_decode($value);
}
并按照自己的意愿正常消费:
foreach($exchanges as $ex)
echo gettype($ex->balance)
endforeach