如何在 Laravel 背包中的不同数据库表上保存数据
How to save data on different database tables in Laravel Backpack
如何将特征字段中的数据保存在不同的 table 上。在下面的 link 示例中,它正在将 Features table 字段保存在数据库的 JSON 字段中。但是,我想将此数据从功能保存到另一个 table。
https://demo.backpackforelavel.com/admin/product/211/Edit
我会回到这里 post 我的回答。我设法安顿下来,我放在这里是为了帮助其他开发者。
问题的第一部分我已经解决了。但是现在我无法从表单中的功能字段中获取数据。
下面是我能够保存和编辑表单数据的源代码。但是,我不能从特征字段中携带数据。有人知道我如何携带Feature
中的字段数据
class ProductCrudController extends CrudController
{
use ListOperation;
use CreateOperation {
store as traitStore;
}
use UpdateOperation {
update as traitUpdate;
}
use DeleteOperation;
public function store()
{
// insert item in the db
$item = $this->crud->create($this->crud->getRequest()->except(['save_action', '_token', '_method']));
$features = json_decode($this->crud->getRequest()->input('features'));
foreach ($features as $itens) {
$obj = new Feature();
$obj->product_id = $item->getKey();
$obj->name = $itens->name;
$obj->save();
}
// show a success message
\Alert::success(trans('backpack::crud.insert_success'))->flash();
return redirect('admin/product');
}
public function update()
{
$featureForm = json_decode($this->crud->getRequest()->input('features'));
// insert item in the db
$item = $this->crud->update($this->crud->getRequest()->id, $this->crud->getRequest()->except(['save_action', '_token', '_method', 'features']));
$objF = Feature::where('product_id', $item->getKey())->get();
foreach ($objF as $itens) {
Feature::where('id', $itens->id)->delete();
}
foreach ($featureForm as $itens) {
$obj = new Feature;
$obj->product_id = $item->getKey();
$obj->name = $itens->name;
$obj->save();
}
// show a success message
\Alert::success(trans('backpack::crud.insert_success'))->flash();
return redirect('admin/product');
}
}
我会回到这里 post 我的回答。我设法安顿下来,我放在这里是为了帮助其他开发者。
我能够在功能字段中的表单版本中引入数据。我在模型中使用了 Mutators - https://laravel.com/docs/8.x/eloquent-mutators
下面是我做的例子
在官方文档或演示项目中有一个这样的例子会很有趣。我相信它也会对其他开发人员有很大帮助。
//model Product
public function getFeaturesAttribute($value)
{
$objects = Features::where('product_id', $this->id)->get();
$array = [];
foreach ($objects as $itens) {
$obj = new stdClass;
$obj->name = $itens->name;
$array[] = $obj;
}
return \json_encode($array);
}
有几种方法可以解决这个问题。我个人更喜欢在模型中创建访问器和修改器 - https://laravel.com/docs/8.x/eloquent-mutators 。它不仅使 CrudController 保持干净(因此可更新),而且还允许您 save/load 来自其他表单的内容(例如:面向用户的表单)。
//model Product
public function getFeaturesAttribute($value)
{
$objects = Features::where('product_id', $this->id)->get();
$array = [];
foreach ($objects as $itens) {
$obj = new stdClass;
$obj->name = $itens->name;
$array[] = $obj;
}
return json_encode($array);
}
如何将特征字段中的数据保存在不同的 table 上。在下面的 link 示例中,它正在将 Features table 字段保存在数据库的 JSON 字段中。但是,我想将此数据从功能保存到另一个 table。
https://demo.backpackforelavel.com/admin/product/211/Edit
我会回到这里 post 我的回答。我设法安顿下来,我放在这里是为了帮助其他开发者。
问题的第一部分我已经解决了。但是现在我无法从表单中的功能字段中获取数据。
下面是我能够保存和编辑表单数据的源代码。但是,我不能从特征字段中携带数据。有人知道我如何携带Feature
中的字段数据class ProductCrudController extends CrudController
{
use ListOperation;
use CreateOperation {
store as traitStore;
}
use UpdateOperation {
update as traitUpdate;
}
use DeleteOperation;
public function store()
{
// insert item in the db
$item = $this->crud->create($this->crud->getRequest()->except(['save_action', '_token', '_method']));
$features = json_decode($this->crud->getRequest()->input('features'));
foreach ($features as $itens) {
$obj = new Feature();
$obj->product_id = $item->getKey();
$obj->name = $itens->name;
$obj->save();
}
// show a success message
\Alert::success(trans('backpack::crud.insert_success'))->flash();
return redirect('admin/product');
}
public function update()
{
$featureForm = json_decode($this->crud->getRequest()->input('features'));
// insert item in the db
$item = $this->crud->update($this->crud->getRequest()->id, $this->crud->getRequest()->except(['save_action', '_token', '_method', 'features']));
$objF = Feature::where('product_id', $item->getKey())->get();
foreach ($objF as $itens) {
Feature::where('id', $itens->id)->delete();
}
foreach ($featureForm as $itens) {
$obj = new Feature;
$obj->product_id = $item->getKey();
$obj->name = $itens->name;
$obj->save();
}
// show a success message
\Alert::success(trans('backpack::crud.insert_success'))->flash();
return redirect('admin/product');
}
}
我会回到这里 post 我的回答。我设法安顿下来,我放在这里是为了帮助其他开发者。
我能够在功能字段中的表单版本中引入数据。我在模型中使用了 Mutators - https://laravel.com/docs/8.x/eloquent-mutators
下面是我做的例子
在官方文档或演示项目中有一个这样的例子会很有趣。我相信它也会对其他开发人员有很大帮助。
//model Product
public function getFeaturesAttribute($value)
{
$objects = Features::where('product_id', $this->id)->get();
$array = [];
foreach ($objects as $itens) {
$obj = new stdClass;
$obj->name = $itens->name;
$array[] = $obj;
}
return \json_encode($array);
}
有几种方法可以解决这个问题。我个人更喜欢在模型中创建访问器和修改器 - https://laravel.com/docs/8.x/eloquent-mutators 。它不仅使 CrudController 保持干净(因此可更新),而且还允许您 save/load 来自其他表单的内容(例如:面向用户的表单)。
//model Product
public function getFeaturesAttribute($value)
{
$objects = Features::where('product_id', $this->id)->get();
$array = [];
foreach ($objects as $itens) {
$obj = new stdClass;
$obj->name = $itens->name;
$array[] = $obj;
}
return json_encode($array);
}