首页 > 解决方案 > 将字段添加到仅将值传递给存储/更新方法的 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'}),但是当我这样做时它仍然会更新/删除关系。

标签: laravel-backpack

解决方案


这是您需要执行的操作,以删除 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;
}

推荐阅读