Php json类型列中的访问键用于雄辩的集合?
我的数据库中的表列另存为Php json类型列中的访问键用于雄辩的集合?,php,mysql,json,laravel-5,Php,Mysql,Json,Laravel 5,我的数据库中的表列另存为jsontype。我想在刀片模板上保存的json对象中显示一个键控值,但我不确定如何显示 假设我在时事通讯模型的表模式中有$table->json('meta'),其中meta列的值为{foo:“bar”} 我如何检索像$newsletter->meta->foo这样的东西?因为在Laravel 5.5上,默认情况下,$newsletter->meta返回字符串而不是json对象,需要一个简单的json\u解码来转换它 除了每次调用json\u decode之外,一个更干
json
type。我想在刀片模板上保存的json对象中显示一个键控值,但我不确定如何显示
假设我在时事通讯
模型的表模式中有$table->json('meta')
,其中meta
列的值为{foo:“bar”}
我如何检索像$newsletter->meta->foo
这样的东西?因为在Laravel 5.5上,默认情况下,$newsletter->meta
返回字符串而不是json对象,需要一个简单的json\u解码来转换它
除了每次调用json\u decode
之外,一个更干净的解决方案是在该列上使用访问器,例如getMetaAttribute
,但这仍然很混乱。我想要PHP对象检测的自动json
列,如何实现这一点?您可以在模型内声明一个protected$casts
数组,在该数组中,您可以指示Eloquent对模型属性进行分类。在您的情况下,看起来是这样的:
/*
* @property string $meta - json is actually just a string
*/
class Newsletter extends Model {
protected $casts = [
'meta' => 'array',
];
}
// Now you can use `$meta` as array:
$newsletter = Newsletter::find(1);
$foo = array_get($newsletter->meta, 'foo');
但这仍然不能将其转换为对象。尽管文档中提到对象
是一种有效的强制类型,但我不能确切地告诉您它的作用
请注意,这些$cast
不是双向的。如果您想在时事通讯
实例上设置meta
,您必须创建自己的工具来将任何对象或数组转换为json字符串。Eloquent允许您在模型上进行定义以完成任务。谢谢,有什么原因使框架在默认情况下更喜欢将json
列转换为字符串而不是对象?有没有办法克服这个问题?我正在处理几十个模型和不同的专栏,所以我想在全局范围内启用它,而不是单独对每个模型进行强制转换。Eloquent不会自动分析属性的值,如果你仔细想想,这会有点奇怪(而且效率很低)。JSON数据本身本质上只是php的一个字符串。