向 CrudController 添加一个字段,该字段仅将值传递给存储/更新方法
Add a Field to a CrudController that ONLY passes values to Store / Update Methods
我正在尝试处理 CrudController 中的字段如何以完全自定义的方式存储或更新特定模型上的数据。我希望 traitStore() 和 traitUpdate() 方法完全忽略这个字段,但希望数据仍然通过请求传递。这专门针对使用 select2_multiple 字段的多对多关系。
我希望通过请求对象将关系 ID 传递给 Store 或 Update 方法,但我不希望 traitStore()
或 traitUpdate()
方法实际执行更新该特定字段参考。
例如……
我的 crud 控制器中有这个字段
$this->crud->addField(
[
'label' => "Groups",
'type' => 'select2_multiple',
'name' => 'groups',
'entity' => 'groups',
'attribute' => 'title',
'model' => "App\Models\Group",
'pivot' => true
]
);
我正在像这样重写存储和更新方法。
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;
}
我找到了 ignore/pass 表单域的简单方法。
示例:
在你的表单字段中有 first_name, last_name, gender
而在你的数据库中只有 fullname, gender
然后你想要 create/update 表单,它将显示 Column not found: 'first_name' not found...
,
如何修复:
- 在模型中添加
$fillable
并用您想要 store/update 的名称字段填充数组数据。例如 $fillable = ['fullname', 'gender'];
- 然后,也只需在模型内部使用修改器。
public function setFullnameAttribute(){
return $this->attributes['fullname'] = \Request::input('first_name') . ' ' . \Request::input('last_name');
}
注意:您应该在 CrudController 中隐藏字段名称 'fullname'。
$this->crud->addField(['name' => 'fullname', 'type' => 'hidden']);
我正在尝试处理 CrudController 中的字段如何以完全自定义的方式存储或更新特定模型上的数据。我希望 traitStore() 和 traitUpdate() 方法完全忽略这个字段,但希望数据仍然通过请求传递。这专门针对使用 select2_multiple 字段的多对多关系。
我希望通过请求对象将关系 ID 传递给 Store 或 Update 方法,但我不希望 traitStore()
或 traitUpdate()
方法实际执行更新该特定字段参考。
例如……
我的 crud 控制器中有这个字段
$this->crud->addField(
[
'label' => "Groups",
'type' => 'select2_multiple',
'name' => 'groups',
'entity' => 'groups',
'attribute' => 'title',
'model' => "App\Models\Group",
'pivot' => true
]
);
我正在像这样重写存储和更新方法。
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;
}
我找到了 ignore/pass 表单域的简单方法。
示例:
在你的表单字段中有 first_name, last_name, gender
而在你的数据库中只有 fullname, gender
然后你想要 create/update 表单,它将显示 Column not found: 'first_name' not found...
,
如何修复:
- 在模型中添加
$fillable
并用您想要 store/update 的名称字段填充数组数据。例如$fillable = ['fullname', 'gender'];
- 然后,也只需在模型内部使用修改器。
public function setFullnameAttribute(){
return $this->attributes['fullname'] = \Request::input('first_name') . ' ' . \Request::input('last_name');
}
注意:您应该在 CrudController 中隐藏字段名称 'fullname'。
$this->crud->addField(['name' => 'fullname', 'type' => 'hidden']);