Laravel Nova 在表单上手动设置 ID
Laravel Nova Set ID manually on Form
我想手动设置我的ID
因为我的 ID 类型为字符串 (varchar)
这是我的模型
<?php
namespace App\Model\Master;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class UnitOfMeasure extends Model
{
protected $table = 'unit_of_measures';
public $timestamps = true;
public $incrementing = false;
use SoftDeletes;
protected $dates = ['deleted_at'];
protected $fillable = array('id','code', 'description', 'scan_input_required');
public function workCenter()
{
return $this->hasMany(WorkCenter::class,'unit_of_measures_code','code');
}
但是 Nova 总是隐藏 ID 字段。
有办法吗?
谢谢
如果您查看调用 creation-fields
端点的请求,您会注意到 ID 甚至不在字段列表中。
你的Resources使用的trait ResolvesFields正在调用一个函数creationFields来生成显示在前面的字段列表,它正在调用removeNonCreationFields:
/**
* Remove non-creation fields from the given collection.
*
* @param \Illuminate\Support\Collection $fields
* @return \Illuminate\Support\Collection
*/
protected function removeNonCreationFields(Collection $fields)
{
return $fields->reject(function ($field) {
return $field instanceof ListableField ||
$field instanceof ResourceToolElement ||
$field->attribute === $this->resource->getKeyName() ||
$field->attribute === 'ComputedField' ||
! $field->showOnCreation;
});
}
并且由于该字段符合此规则:
$field->attribute === $this->resource->getKeyName()
正在删除 ID 字段。
要强制该字段,您可以在资源中覆盖该函数:
/**
* Remove non-creation fields from the given collection.
*
* @param \Illuminate\Support\Collection $fields
* @return \Illuminate\Support\Collection
*/
protected function removeNonCreationFields(Collection $fields)
{
return $fields->reject(function ($field) {
return $field instanceof ListableField ||
$field instanceof ResourceToolElement ||
$field->attribute === 'ComputedField' ||
! $field->showOnCreation;
});
}
我 运行 自己解决了这个问题,看起来 Nova 已经更新,因此您可以手动将 ID 字段添加到资源中:Text::make('ID')
然后您将有一个可编辑的ID 字段。
这是 github 问题:https://github.com/laravel/nova-issues/issues/268
我想手动设置我的ID 因为我的 ID 类型为字符串 (varchar)
这是我的模型
<?php
namespace App\Model\Master;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class UnitOfMeasure extends Model
{
protected $table = 'unit_of_measures';
public $timestamps = true;
public $incrementing = false;
use SoftDeletes;
protected $dates = ['deleted_at'];
protected $fillable = array('id','code', 'description', 'scan_input_required');
public function workCenter()
{
return $this->hasMany(WorkCenter::class,'unit_of_measures_code','code');
}
但是 Nova 总是隐藏 ID 字段。 有办法吗?
谢谢
如果您查看调用 creation-fields
端点的请求,您会注意到 ID 甚至不在字段列表中。
你的Resources使用的trait ResolvesFields正在调用一个函数creationFields来生成显示在前面的字段列表,它正在调用removeNonCreationFields:
/**
* Remove non-creation fields from the given collection.
*
* @param \Illuminate\Support\Collection $fields
* @return \Illuminate\Support\Collection
*/
protected function removeNonCreationFields(Collection $fields)
{
return $fields->reject(function ($field) {
return $field instanceof ListableField ||
$field instanceof ResourceToolElement ||
$field->attribute === $this->resource->getKeyName() ||
$field->attribute === 'ComputedField' ||
! $field->showOnCreation;
});
}
并且由于该字段符合此规则:
$field->attribute === $this->resource->getKeyName()
正在删除 ID 字段。
要强制该字段,您可以在资源中覆盖该函数:
/**
* Remove non-creation fields from the given collection.
*
* @param \Illuminate\Support\Collection $fields
* @return \Illuminate\Support\Collection
*/
protected function removeNonCreationFields(Collection $fields)
{
return $fields->reject(function ($field) {
return $field instanceof ListableField ||
$field instanceof ResourceToolElement ||
$field->attribute === 'ComputedField' ||
! $field->showOnCreation;
});
}
我 运行 自己解决了这个问题,看起来 Nova 已经更新,因此您可以手动将 ID 字段添加到资源中:Text::make('ID')
然后您将有一个可编辑的ID 字段。
这是 github 问题:https://github.com/laravel/nova-issues/issues/268