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的一个字符串。