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

laravel-admin 标签,单选,多选,添加展示处理

吉鸿宝
2023-12-01

场景:为了方便开发使用了laravel-admin框架,使用的时候遇到了很多不理解,也解决很多问题,但是单独拿出来,感觉没必要记录,正好遇到了一个结合多个问题的模块,能概括很多问题,就一次性记录一下,方便以后使用。这是一个产品模块,有标签,分类,多选,单选,图片上传等功能。这里不概述如何创建模块

1、添加功能

/**
     * Make a form builder.
     *
     * @return Form
     */
    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->radio('is_sale', __('是否上架'))->options([
            '1' => '是',
            '2' => '否'
        ])->default(1);
        $form->checkbox('tags', '标签')->options(Tags::all()->pluck('name','id'));
        $form->textarea('content', __('产品内容'));
        $form->textarea('summary', __('产品简介'));

        return $form;
    }

品牌字段,是一个下拉框,对brand表查询,并且规定了展示的k,v。
图片字段,做了一个缩略图。
标签是多选框。

2、model操作

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;
            }

            $sTags = implode(',',$model->tags);
            $model->tags = $sTags;

            unset($model->cover);
        });
    }

我这里图片不在一个表所以在模型里,需要单独来处理,最后需要把他销毁掉。标签数据因为前面是多选,所以现在$model里面tags是一个array,这里需要处理一下要不然会报错。

3、列表展示,字段处理

   protected function grid()
    {
        $grid = new Grid(new Good());
        $grid->column('good_name', __('产品名称'));
        $grid->column('brand_id',__('品牌'))->display(function (){
            $arr = Brand::where('id',$this->brand_id)->first();
            if ( !$arr || !$arr->brand_name )
            {
                return '';
            }
            return $arr->brand_name;
        });
        $grid->column('cate_id',__('分类'))->display(function (){
            $arr = Category::where('id',$this->cate_id)->first();
            if ( !$arr || !$arr->category_name )
            {
                return '';
            }
            return $arr->category_name;
        });
        $grid->column('price', __('售价'));
        $grid->column('original', __('原价'));
        $grid->column('is_sale', '是否上架')->filter([
            '1'=>'是',
            '2'=>'否'
        ])->display(function ($is_sale){
            return $is_sale ? '是' : '否';
        });
        $grid->column('tags', __('标签'))->display(function ($tags){
            $arr = explode(',',$tags);
            $arrTag = Tags::whereIn('id',$arr)->get()->toArray();
            $str = '';
            foreach ( $arrTag as $k=>$v )
            {
                if ( $v['name'] )
                    $str .= "<span style='border:1px solid #ccc;'>". $v['name']."</span>"." ";
            }
            return $str;
        });
        $grid->column('created_at', __('创建时间'));

        return $grid;
    }

为了显示对应的数据,列表需要对数据库字段进行处理。主要是一些查询。

 类似资料: