【发布时间】:2019-03-04 05:10:47
【问题描述】:
请问如何在模型类上创建动态属性。假设我有一个类似下面代码的表结构。
Schema::create('materials', function (Blueprint $table) {
$table->increments('id');
$table->string('sp_number');
$table->string('factory');
$table->text('dynamic_fields')->comment('All description of the material will saved as json');
$table->timestamps();
});
我的表结构中有一个名为“dynamic_fields”的列,它将保存字段的 JSON 字符串。下面是 JSON 结构的示例。
[
{
"name":"COLOR WAY",
"value":"ASDFF12"
},
{
"name":"DESCRIPTION",
"value":"agg2sd12"
},
{
"name":"REF NUM",
"value":"121312"
}
]
所以我想从我的动态字段中访问一个字段,例如“COLOR WAY”。 在我的模型中,我想像这样访问动态字段上的 COLOR WAY 字段
$material->color_way;
谁能告诉我怎么做? 对不起我的英语。
【问题讨论】:
-
嗨凯文。首先你可以使用
$table->json,如果你使用较新版本的mysql并在其中存储json,不需要是文本。然后根据您的示例,您尝试从 json 访问值,而不是键。 Eloquent 模型中的访问器函数可以写成getColorWayAttribute(),这样你就可以使用$material->color_way。 -
你总是提前知道动态属性是什么吗?他们的数量很少吗?如果是这样,您可以为它们全部定义accessor methods,这将允许您以您想要的方式访问它们。如果没有,那么您可以采取另一种方法。
标签: php laravel dynamic attributes field