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

时间:2017-10-12 09:14:42

标签: laravel backpack-for-laravel

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

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以手动建立关系。

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

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

EDIT2:

有人问起这种关系:

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

这很好用它的关系工作没问题它怎么能让背包把数据存储为当飞机还没有ID时的关系,或者我怎么能以这种方式传递我在上面发布的数据背包crud控制器可以处理它吗?

2 个答案:

答案 0 :(得分:0)

You may need to create a flight first, if no flight id is being provided. Can you explain the database relational structure more?

答案 1 :(得分: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之后完成的。