结合使用select2_from_ajax和JSON数据源

时间:2019-02-18 11:21:29

标签: php laravel backpack-for-laravel

我是Laravel和Laravel背包的新手,所以请多多包涵。我正在尝试创建一个客户注册表单,其中包含一个“州”字段,该字段根据为“国家/地区”字段选择的值而动态填充。

我正在按照背包作者的指示进行操作: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级别上的单独实体,我不了解实现的外观。

是否有可能以“背包原生”的方式实现这种依赖关系,而无需诉诸创建自定义字段类型?

0 个答案:

没有答案