laravel-admin小技巧$grid显示序号和下级数量统计数字

通过ID查询食材数只能通过display,但是如果$grid如果有ID列,会和该列冲突,会导致id列和该列的统计数一样。ID消失。因此我想试试不现示ID换成序号。这样还真的完美实现。
代码如下:
Admin/FoodController.php

    protected function grid()
    {
        $grid = new Grid(new CookFoods());

        $grid->number('序号');
        $grid->column('food_name','菜名');
        $grid->column('description','描述');
        $grid->column('tags','标签');
        $grid->column('id','食材数')->display(function ($id){
            return CookFoodCuisines::where('food_id','=',$id)->count();
        })->style('text-align:center');
        $grid->column('created_at', __('Created at'));
        $grid->column('updated_at', __('Updated at'));
        $grid->rows(function ($row,$number){
           $row->column('number',$number+1);
        });

        return $grid;
    }

菜谱列表示例图
以供学习使用laravel-admin的伙伴儿学习参考。

本作品采用《CC 协议》,转载必须注明作者和本文链接
坚信技术改变世界,改变人生,改善个人生活。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 11

这样搞可能会造成n+1问题

1年前 评论
fengzb (楼主) 1年前
fengzb (楼主) 1年前
忆往昔弹指间 1年前
fengzb (楼主) 1年前

正如楼上说的, 你可以想像你有二十条数据, 那么就会执行二十次 CookFoodCuisines::where('food_id','=',$id)->count()

更好的做法是模型定义好关联关系

class CookFoods .... {
      public function cuisines()
      {
            return $this->hasMany(CookFoodCuisines::class, 'food_id');
      }
}

protected function grid()
    {
        $grid = new Grid(new CookFoods());

        $grid->model()->withCount('cuisines');

        $grid->number('序号');
        $grid->column('food_name','菜名');
        $grid->column('description','描述');
        $grid->column('tags','标签');
        // 直接使用 cuisines_count 字段
        $grid->column('cuisines_count','食材数')->style('text-align:center');
        $grid->column('created_at', __('Created at'));
        $grid->column('updated_at', __('Updated at'));
        $grid->rows(function ($row,$number){
           $row->column('number',$number+1);
        });

        return $grid;
    }
1年前 评论
fengzb (楼主) 1年前
fengzb (楼主) 1年前
seth-shi (作者) 1年前
seth-shi (作者) 1年前
fengzb (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!