laravel - Laravel 背包多态 CRUD 字段
问题描述
我希望能够使用 Backpack CRUD 处理多态关系。我找不到任何好的解释,我正在努力在他们的其他包(例如 PermissionManager)中取消它的实现。我想要做的是能够更改用户和临床医生链接到的专业 - 类似于权限管理器中角色和权限的更改方式。
我与用户和临床医生与专科之间存在多态关系。每个模型 CRUDTrait。
专业模型
public function user()
{
return $this->morphedByMany(User::class, 'model', 'model_has_specialties');
}
public function clinician()
{
return $this->morphedByMany(Clinician::class, 'model', 'model_has_specialties');
}
用户模型
public function specialties()
{
return $this->morphToMany(Specialty::class, 'model', 'model_has_specialties');
}
临床医生模型
public function specialties()
{
return $this->morphMany(Specialty::class, 'model', 'model_has_specialties');
}
数据透视表是“model_has_specialties”,包含:
$table->increments('id');
$table->timestamps();
$table->integer('model_id');
$table->string('model_type');
$table->integer('specialty_id');
$table->unique(['model_id', 'model_type', 'specialty_id']);
我尝试了许多不同的 addField() 配置,但是我真的很挣扎。
尝试过的 addField() 示例:
$this->crud->addField([
'label' => 'specialties',
'type' => 'select',
'morph' => true,
'name' => 'model_id',
'entity' => 'ModelHasSpecialties',
'attribute' => 'model_id',
'model' => 'App\Models\Clinician',
'pivot' => true,
]);
** 编辑 **
这是 ClinicianCrudController,它是临床医生类和引导程序之间的链接。
class ClinicianCrudController extends CrudController
{
public function setup()
{
/*
|--------------------------------------------------------------------------
| CrudPanel Basic Information
|--------------------------------------------------------------------------
*/
$this->crud->setModel('App\Models\Clinician');
$this->crud->setRoute(config('backpack.base.route_prefix') . '/clinician');
$this->crud->setEntityNameStrings('clinician', 'clinicians');
$this->crud->setColumns(['surname', 'forename', 'title', 'specialties']);
$this->crud->addField([
'name' => 'surname',
'type' => 'text',
'label' => 'Surname'
]);
$this->crud->addField([
'name' => 'forename',
'type' => 'text',
'label' => 'Forename'
]);
$this->crud->addField([
'name' => 'title',
'type' => 'select_from_array',
'options' => [
'Dr' => 'Dr',
'Miss' => 'Miss',
'Mr' => 'Mr',
'Mrs' => 'Mrs',
'0Ms' => 'Ms',
'Prof' => 'Prof',
],
'label' => 'Title',
'allows_null' => false,
]);
$this->crud->addField([
'label' => 'specialties',
'type' => 'select',
'morph' => true,
'name' => 'model_id',
'entity' => 'ModelHasSpecialties',
'attribute' => 'model_id',
'model' => 'App\Models\Clinician',
'pivot' => true,
]);
/*
|--------------------------------------------------------------------------
| CrudPanel Configuration
|--------------------------------------------------------------------------
*/
// TODO: remove setFromDb() and manually define Fields and Columns
$this->crud->setFromDb();
// add asterisk for fields that are required in ClinicianRequest
$this->crud->setRequiredFields(StoreRequest::class, 'create');
$this->crud->setRequiredFields(UpdateRequest::class, 'edit');
}
解决方案
推荐阅读
- python - 如何加快第二个循环依赖于第一个循环的嵌套循环?
- svg - 关节:如何将 icomoon 图标包含到 rappid 的自定义形状中
- excel - 如何从这个excel单元格中的特定文本中提取内容
- kubernetes - 如何在 terraform 中获取 k8s 作业的输出
- fastapi - 采用 CSV 或 XLSX 文件输入的 FAST API
- kubernetes - configMap更改时如何生成通知
- python - 无需python库即可连接到远程linux的简单代码
- mysql - 使用另一个存储过程检查存储过程的进度
- ruby-on-rails - Nginx 和 Unicorn) 无法访问本地服务器
- sql-server - Onprem DevOps 服务器 TFS2019 需要为用户配置文件创建报告。特别喜欢的电子邮件报告