如何在 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);
    }