我是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级别上的单独实体,我不了解实现的外观。
是否有可能以“背包原生”的方式实现这种依赖关系,而无需诉诸创建自定义字段类型?