Laravel Nova Установить ID вручную в форме - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу установить свой идентификатор вручную, поскольку мой тип идентификатора в виде строки (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 всегда скрывает поле идентификатора.Есть ли способ сделать это?

Спасибо

1 Ответ

0 голосов
/ 03 декабря 2018

Если вы посмотрите на запрос, который вызывает конечную точку creation-fields, вы заметите, что идентификатор отсутствует даже в списке полей.

Черта 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()

Поле идентификатора удаляется.

Чтобы принудительно заполнить поле, вы можете перезаписать эту функцию в своем ресурсе:

/**
 * 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;
    });
}
...