laravel-backpack - 将字段添加到仅将值传递给存储/更新方法的 CrudController
问题描述
我正在尝试处理 CrudController 中的字段如何以完全自定义的方式存储或更新特定模型上的数据。我希望 traitStore() 和 traitUpdate() 方法完全忽略此字段,但希望仍通过请求传入数据。这具体是指使用 select2_multiple 字段的多对多关系。
我希望它可以通过请求对象将关系 ID 传递给 Store 或 Update 方法,但我不希望traitStore()
ortraitUpdate()
方法实际执行对该特定字段引用的更新。
例如...
我的 crud 控制器中有这个字段
$this->crud->addField(
[
'label' => "Groups",
'type' => 'select2_multiple',
'name' => 'groups',
'entity' => 'groups',
'attribute' => 'title',
'model' => "App\Models\Group",
'pivot' => true
]
);
我正在像这样覆盖 Store 和 Update 方法。
public function store()
{
$this->crud->setValidation(UserRequest::class);
// WOULD LIKE TO SAVE EVERYTHING BUT IGNORE THE GROUPS FIELD
$response = $this->traitStore();
// DO WHATEVER I WANT WITH GROUPS AT THIS POINT
$groups = $request->groups
return $response;
}
public function update()
{
$this->crud->setValidation(UserRequest::class);
// WOULD LIKE TO SAVE EVERYTHING BUT IGNORE THE GROUPS FIELD
$response = $this->traitUpdate();
// DO WHATEVER I WANT WITH GROUPS AT THIS POINT
$groups = $request->groups
return $response;
}
查看我的评论,我想获得对组的引用并根据需要处理更新模型。
我试图取消设置请求中的组值unset($this->request{'groups'})
,但是当我这样做时它仍然会更新/删除关系。
解决方案
这是您需要执行的操作,以删除 CrudController 更新的引用。
public function update()
{
$this->crud->setValidation(UserRequest::class);
$request = clone $this->request;
$this->crud->request->request->remove('groups');
$this->crud->removeField('groups');
$groups = $request->groups
$response = $this->traitUpdate();
return $response;
}
推荐阅读
- python - ProgrammingError:在使用 extras.execute_values 的 psycopg2 更新查询中“,”处或附近的语法错误
- python - 按百分比将列表拆分为 3 个部分
- c++ - 使用 VS 公共继承进行模板化
- laravel - laravel:“语法错误,意外的'js'(T_STRING),期待','或')'”
- c# - Web 窗体 - 登录页面在 IIS 上不起作用(未重定向)
- python - 限制 Matplotlib 中的刻度数
- python - Keras LSTM 模型仅在一个方向上进行预测,以实现领先一步的预测
- javascript - JS:从日文/假名输入创建 ruby 标签
- r - Stack Barplot (ggplot):有没有办法使用“可重复”的不同顺序填充值?
- mysql - 如何在 micronaut 中使用 Gorm 为 mysql 配置 application.yml