拉拉维尔·诺瓦
对于一个特定的项目,我想使用的强大功能,并结合一个更灵活的数据模型。具体地说,我希望能够将存储在JSON数据库字段中的属性的字段添加到资源中,而不是在表上。
具体情况:
数据库模型:引文(包括迁移)
public function up()
{
Schema::create('quotations', function(Blueprint $table)
{
$table->bigInteger('id', true);
$table->timestamps();
$table->string('client_name', 100)->nullable();
$table->string('client_surname', 100)->nullable();
$table->string('status', 10)->nullable()->default('NEW');
$table->text('data')->nullable();
});
}Nova资源
因此,我可以定义一个“正常”NOVA资源,并在App\Nova\引号中定义以下字段(*忽略状态):
public function fields(Request $request)
{
return [
Text::make('Client Name')->sortable(),
Text::make('Client Surname')->sortable(),
];
}现在,我的“愿望”就是要有这样的效果,使用不存在的"bindTo"方法来说明我想要实现的目标。
public function fields(Request $request)
{
return [
Text::make('Client Name')->sortable(),
Text::make('Client Surname')->sortable(),
//Fields bound into the JSON data property
Text::make('Client Id')->bindTo('data.client_id),
Date::make('Client Date Of Birth')->bindTo('data.client_date_of_birth),
//etc
];
}因此,当保存引号模型时,client_name和client_surname属性将按照正常情况保存到数据库中。但是client_id和client_date_of_birth应该保存到JSON数据属性中。
我知道我可以在报价模型上设置一个突变体
public function setClientIdAttribute($value)
{
set_data($this->data,'client_id',$value);
}然而,这仍然需要一个“非动态”的引用模型。我希望能够动态地将字段添加到视图中,而不必在基础知识之外更改引用模型。一个真实的例子是,在生成报价之前,不同的产品有不同的输入字段要收集。然后,我可以轻松地在Nova中动态地注入字段配置,同时保持数据库模型的简单性。
我还尝试了一个简单问题的答案:Laravel Model Dynamic Attribute
然而,提议的解决方案不起作用,因为Nova仍在寻找表上的属性。
我想得到一些关于如何解决这一要求的意见。
发布于 2019-03-01 17:58:32
你可以这样做:
// Model
protected $casts = [
'data' => 'array'
];
// Nova Resource
Text::make('Client Id', 'data->client_id')->resolveUsing(function ($value) {
return $value;
}),https://stackoverflow.com/questions/54863332
复制相似问题