向 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']);