首页 文章

Laravel背包:使用自定义视图存储属于许多关系

提问于
浏览
0

我有一个航班,这个航班有一个自定义视图字段,如下所示:

enter image description here

这表示属于许多关系,其将website_id / flight_id和定价作为枢轴数据存储在数据透视表中 .

自定义视图使用JS以此格式将此数据发送回控制器:

{"1":{"price_adult":"434","price_child":"545"},"2":{"price_adult":"323","price_child":"324"},"3":{"price_adult":"434","price_child":"43"}}

尝试使用请求发送此数据不会创建关系字段,并且因为我在控制器中创建它时没有飞行ID,所以我无法循环此JSON以手动 Build 关系 .

任何人都可以指出最佳行动方案是什么,或者是否有支持?我看了一下这些文档,但是它们在很多帮助方面很短暂而且不完整 .

编辑:我应该说我可以使用关系模型上的自定义名称属性来完成这项工作,然后添加一个set mutator来循环这些数据并更新价格关系,但我不想沿着这条路线走下去有支持,我在背包里开箱即用 .

EDIT2:

有人问起这种关系:

$this->belongsToMany(Website::class, 'website_pricing')->withPivot('price_adult', 'price_child');

这是正常工作它不是一个问题的关系工作它如何让背包存储数据作为一个关系当航班还没有ID,或者我怎么能传递我上面发布的数据,使背包crud控制器可以处理吗?

2 回答

  • 0

    如果没有提供航班ID,您可能需要先创建航班 . 你能解释一下数据库关系结构吗?

  • 0

    基本上我认为我应该发布我所做的事情,因为没有人可以提供答案 .

    所以基本上你必须从父级复制存储/更新功能,改变几行 .

    $this->crud->hasAccessOrFail('create');
    
        // fallback to global request instance
        if (is_null($request)) {
            $request = \Request::instance();
        }
    
        // replace empty values with NULL, so that it will work with MySQL strict mode on
        foreach ($request->input() as $key => $value) {
            if (empty($value) && $value !== '0') {
                $request->request->set($key, null);
            }
        }
    
        // insert item in the db
        $item = $this->crud->create($request->except(['save_action', '_token', '_method']));
        $this->data['entry'] = $this->crud->entry = $item;
    
        // show a success message
        \Alert::success(trans('backpack::crud.insert_success'))->flash();
    
        // save the redirect choice for next time
        parent::setSaveAction();
    
        return parent::performSaveAction($item->getKey());
    

    基本上任何使用 $this->method 引用父类中的函数的行都需要更改为 parent::

    这行是我用来提交传递给控制器的关系JSON字符串作为关系 $item->prices()->sync(json_decode($request->input('prices'), true));

    在包含 $item = $this->crud->create 的行作为刚刚存储的项目ID之后,此操作将在此时完成 .

相关问题