Laravel Nova
Для конкретного проекта я хотел бы использовать возможности пользовательского интерфейса Nova Resource в сочетании с более гибкой моделью данных.В частности, я хочу иметь возможность добавлять поля в ресурс для атрибутов, хранящихся внутри поля базы данных 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 \ Quotation:
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.
Я знаю, что могу установить Mutator для модели предложений
public function setClientIdAttribute($value)
{
set_data($this->data,'client_id',$value);
}
Однако для этого все еще требуется "нединамический"Котировочная модель.Я хочу иметь возможность добавлять поля к представлению в двух словах, не меняя модель предложения вне базовых принципов.Реальным примером может служить случай, когда различные продукты имеют разные поля ввода, чтобы собрать их перед созданием предложения.Затем я мог бы легко ввести динамическое определение поля в Nova Resource, сохранив при этом простоту модели базы данных.
Я также попробовал ответ, предложенный на простой вопрос: Динамический атрибут модели Laravel
Однако - предложенное решение не работает, так как Nova все еще ищет атрибуты на столе.
Я хотел бы получить некоторую информацию о том, как справиться с этим требованием.