Использование select2_from_ajax с источником данных JSON - PullRequest
0 голосов
/ 18 февраля 2019

Я новичок в Laravel и в Backpack for Laravel, поэтому, пожалуйста, потерпите меня.Я пытаюсь создать форму регистрации клиента с полем «Состояние», которое заполняется динамически в зависимости от значения, выбранного для поля «Страна».

Я следую инструкциям, предоставленным здесь автором Backpack: https://backpackforlaravel.com/docs/3.5/crud-fields#select2_from_ajax

Из этого набора данных получены состояния и страны: https://github.com/antonioribeiro/countries. Они возвращаются как коллекции, но не читаются из БД.

Схема таблицы для клиентов (упрощенно)

+-------------------+---------+--------+
| Field             | Type    | Length |
+-------------------+---------+--------+
| uuid              | CHAR    | 36     |
| name              | VARCHAR | 128    |
| city              | VARCHAR | 128    |
| state             | VARCHAR | 64     |
| country_iso_cca2  | VARCHAR | 2      |
+-------------------|---------+--------+

Хорошая часть

Поле "Страна" работает просто отлично.Он извлекает данные из набора данных JSON при создании и считывает / записывает информацию из или в БД при обновлении / сохранении:

// ClientCrudController.php

$countries = new Countries();
$allCountriesCodes = $countries->all()->pluck('name.common', 'cca2')->toArray();

$this->crud->addField([
    'name' => 'country_iso_cca2',
    'label' => 'Country',
    'type' => 'select2_from_array',
    'options' => $allCountriesCodes,
    'allows_null' => false,
    'default' => 'US',
]);

Плохая (неполная) часть

// ClientCrudController.php

$this->crud->addField([
    'name' => 'state',
    'label' => 'State',
    'type' => 'select2_from_ajax',
    'entity' => 'foobar', // the method that defines the relationship in your Model
    'attribute' => 'name',
    'data_source' => url('api/states'),
    'placeholder' => 'Select a country first...',
    'dependencies' => ['country_iso_cca2'],
]);

Вызов /admin/client/create приведет к ошибке ( «Вызов неопределенного метода App \ Models \ Client :: foobar» ).

Я понимаю, что ошибка возникает потому, что не определена модель для состояний и, следовательно, нет взаимосвязи.Моя проблема в том, что я не понимаю, как должна выглядеть реализация в подобном случае, когда два поля выбора не представляют отдельные объекты на уровне ORM.

Возможно ли реализовать этот видзависимость "родным рюкзаком" способом, не прибегая к созданию настраиваемого типа поля?

...