Laravel 背包:使用自定义视图存储属于许多关系
Laravel Backpack : Storing Belongs To Many relationships using custom view
我有一个航班 class,这个航班有一个自定义视图字段,如下所示:
这表示属于许多关系,它将 website_id / flight_id 和定价作为数据透视表数据存储在数据透视表 table 中。
自定义视图使用 JS 以这种格式将此数据发送回控制器:
{"1":{"price_adult":"434","price_child":"545"},"2":{"price_adult":"323","price_child":"324"},"3":{"price_adult":"434","price_child":"43"}}
尝试通过请求发送此数据不会创建关系字段,并且因为在控制器中创建此数据时我没有航班 ID,所以我无法将此 JSON 循环到手动建立关系。
谁能指出最好的行动方案是什么,或者是否有人支持?我看了一下文档,但就提供的帮助而言,它们非常简短且不完整。
编辑:
我应该说我可能可以使用关系模型上的自定义名称属性来完成这项工作,然后添加一个设置变量来循环此数据并更新价格关系,但如果有的话我不想走这条路支持这个我在背包里开箱即用。
编辑 2:
有人问关系:
$this->belongsToMany(Website::class, 'website_pricing')->withPivot('price_adult', 'price_child');
这工作正常它不是关系工作的问题当航班还没有ID时我如何让背包将数据存储为关系,或者我如何传递我在上面发布的数据背包 crud 控制器可以处理的方法?
如果未提供航班 ID,您可能需要先创建一个航班。能多解释一下数据库关系结构吗?
基本上认为我应该 post 我所做的,因为没有人能对此提供答案。
所以基本上你必须从父级复制存储/更新功能,更改几行。
$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
引用父 class 函数的行都需要更改为 parent::
这一行是我用来提交关系 JSON 作为关系 $item->prices()->sync(json_decode($request->input('prices'), true));
传递给控制器的字符串
这是在包含 $item = $this->crud->create
的行之后完成的,因为刚刚存储的项目 ID 将在那时可用。
我有一个航班 class,这个航班有一个自定义视图字段,如下所示:
这表示属于许多关系,它将 website_id / flight_id 和定价作为数据透视表数据存储在数据透视表 table 中。
自定义视图使用 JS 以这种格式将此数据发送回控制器:
{"1":{"price_adult":"434","price_child":"545"},"2":{"price_adult":"323","price_child":"324"},"3":{"price_adult":"434","price_child":"43"}}
尝试通过请求发送此数据不会创建关系字段,并且因为在控制器中创建此数据时我没有航班 ID,所以我无法将此 JSON 循环到手动建立关系。
谁能指出最好的行动方案是什么,或者是否有人支持?我看了一下文档,但就提供的帮助而言,它们非常简短且不完整。
编辑: 我应该说我可能可以使用关系模型上的自定义名称属性来完成这项工作,然后添加一个设置变量来循环此数据并更新价格关系,但如果有的话我不想走这条路支持这个我在背包里开箱即用。
编辑 2:
有人问关系:
$this->belongsToMany(Website::class, 'website_pricing')->withPivot('price_adult', 'price_child');
这工作正常它不是关系工作的问题当航班还没有ID时我如何让背包将数据存储为关系,或者我如何传递我在上面发布的数据背包 crud 控制器可以处理的方法?
如果未提供航班 ID,您可能需要先创建一个航班。能多解释一下数据库关系结构吗?
基本上认为我应该 post 我所做的,因为没有人能对此提供答案。
所以基本上你必须从父级复制存储/更新功能,更改几行。
$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
引用父 class 函数的行都需要更改为 parent::
这一行是我用来提交关系 JSON 作为关系 $item->prices()->sync(json_decode($request->input('prices'), true));
这是在包含 $item = $this->crud->create
的行之后完成的,因为刚刚存储的项目 ID 将在那时可用。