当前位置: 首页 > 工具软件 > laravel-tags > 使用案例 >

laravel-admin from数据存储到多个表

长孙翔
2023-12-01

场景:创建产品信息,图片会单独存储到good_image表中,其他数据存储到产品表中

1、处理数据前提准备
good 产品表,good_image 产品图片表
生成GoodController,

2、GoodController,from方法接收数据

protected function form()
    {

        $form = new Form(new Good());

        $form->text('good_name', __('产品名称'));
        $form->select ('brand_id', '品牌')->options (Brand::all()->pluck('brand_name','id'));
        $form->select('cate_id','分类')->options(
            Category::all()->pluck('category_name','id')
        );
        $form->image('cover',__('封面图'))
            ->thumbnail('small', $width = 300, $height = 300)->removable();
        $form->decimal('price', __('售价'));
        $form->decimal('original', __('原价'));
        $form->number('is_sale', __('是否上架'))->default(1);
        $form->text('tags', '标签');
        $form->textarea('content', __('产品内容'));
        $form->textarea('summary', __('产品简介'));

        return $form;
    }
}

这里可以看到cover封面字段,这个是我单独存储到good_image表中的字段,但是good表是没有这个字段的,先接收一下数据。

3、Good模型处理

class Good extends Model
{
    public $table = 'good';

    public static function boot(){

        // 继承父类
        parent::boot();

        // updating creating saving 这几个方法你自己选择,打印一下$model看看你就知道怎么取出数据了
        static::saving(function ($model) {
            $nId = app(Snowflake::class)->nextId();
            $model->id= $nId ;
            //组装图片信息
            $arrImage = [
                'id'        => app(Snowflake::class)->nextId(),
                'good_id'   => $nId,
                'position'  => 1,
                'link'      => $model->cover
            ];
            $bRet = GoodImage::create($arrImage);
            if ( !$bRet )
            {
                return false;
            }
            unset($model->cover);
        });
    }

    public function goodImage()
    {
        return $this->hasMany(GoodImage::class);
    }
}

这里在boot方法里面,组装了image的数据,单独处理,并存入good_image中,然后最后一定要删除cover字段,因为good里面是没有这个对象的,如果不销毁,会报错。这样就完成了。

这里说一下,这个办法我是没有办法中的办法,我读了一遍文档没有看到有专门讲如何一对多存储的,也有可能是我没看懂,所以没办法我只能用笨的办法先完成它,肯定有人会说多表处理数据,没有事务处理,这里我也是查了一下,没找到怎么在这个对象中进行事务,那只能在前面数据尽量先处理好传过来的参数,给表单加一些验证和约束。尽量保证数据的完整性,这里如果有哪位大哥,找到很好的办法,希望你可以私信一下我,我也学习一下。谢谢

 类似资料: