BackPack for Laravel: отображать два поля с одинаковыми именами - PullRequest
0 голосов
/ 13 июня 2019

Что у меня есть:

Таблицы в БД:

Schema::create('orders', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('primary_person');
    $table->unsignedBigInteger('secondary_person');
});
Schema::create('persons', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('first_name', 255);
    $table->string('last_name', 255);
});

Модель:

class Order extends Model
{
    use CrudTrait;

    protected $table = 'orders';
    protected $fillable = [
        'primary_person',
        'secondary_person',
    ];

    public function primaryPerson()
    {
        return $this->hasOne(Person::class, 'id', 'primary_person');
    }

    public function secondaryPerson()
    {
        return $this->hasOne(Person::class, 'id', 'secondary_person');
    }
}

Что нужно сделать:

На странице изменить порядок Я хочу отобразить информацию о двух лицах:

  • Имя Первичного лица
  • Фамилия Первичного лица
  • Имя вторичного человека
  • Фамилия второстепенного лица

Что я сделал:

В OrderCrudController.php добавлено:

$this->crud->addFields([
    [
       'label' => 'First Name of Primary person',
       'type' => 'text',
       'name' => 'first_name',
       'entity' => 'primaryPerson',
       'model' => 'App\Models\Person',
    ],
    [
        'label' => 'Last Name of Primary person',
        'type' => 'text',
        'name' => 'last_name',
        'entity' => 'primaryPerson',
        'model' => 'App\Models\Person',
    ],
    [
        'label' => 'First Name of Secondary person',
        'type' => 'text',
        'name' => 'first_name',
        'entity' => 'secondaryPerson',
        'model' => 'App\Models\Person',
    ],
    [
        'label' => 'Last Name of Secondary person',
        'type' => 'text',
        'name' => 'last_name',
        'entity' => 'secondaryPerson',
        'model' => 'App\Models\Person',
    ]
]);

Что я получу:

Только два последних поля (дополнительная информация о человеке).

enter image description here

Основная проблема:

Мне не удалось отобразить поля с тем же «именем» , потому что «имя» - атрибут (столбец в базе данных), который также станет именем вход.
В столбцах эта ситуация обрабатывается атрибутом "ключ" . Но в полях это не работает.

1 Ответ

0 голосов
/ 17 июля 2019

Действительно, у вас не может быть двух полей с одинаковым именем.В столбцах возможно использование атрибута key, но, как вы упомянули, в формах create / update возникает проблема из-за того, как работают HTML-формы: только последнее значение ввода будет передано в PHP и сохранено вбаза данных.

Я рекомендую вам обойти это, используя аксессоры и мутаторы .Второе поле можно назвать как-нибудь иначе, даже если этот столбец не существует в базе данных.Тогда просто используйте метод `` `setSecondFirstName ($ value)` `` `внутри вашей Модели, который принимает это значение и сохраняет его по своему усмотрению.

Надеюсь, это поможет.

...