Laravel中Datatables同表关联显示父分类名称及数据缺失问题咨询
问题解答
1. 是否需要关联同表查询?
是的,要实现parent_id列展示对应父分类名称,需要对categories表做自关联查询。
2. 你编写的关联语句问题说明
你写的关联逻辑方向是对的,但join默认是INNER JOIN,仅当关联两边的字段完全匹配时才会返回记录,parent_id为null的顶级分类没有对应的父分类匹配项,因此会被直接过滤。
3. 修复方案
将内连接改为LEFT JOIN(左连接),左连接会保留左侧主表(你别名设为c的分类表)的所有记录,哪怕右表没有匹配的关联项也不会被过滤。同时注意要把前端Datatables需要用到的image等字段补充到select查询里,避免前端找不到对应字段报错。
后端查询修改后代码
$query = DB::table('categories as c') ->leftJoin('categories as k', 'c.parent_id', '=', 'k.id') ->select('c.id', 'c.name', 'c.image', 'c.parent_id', 'k.name as parent_name') ->orderBy('c.id');
前端Datatables列配置修改
把原来的parent_id列对应字段改成查询出来的parent_name,同时给无父分类的顶级分类加默认显示值即可:
columns: [ { data: 'id' }, { data: 'image', render: function ( data, type, row ) { return data ? '<img src="/images/product/'+data+'" height="80" width="80">' : '<img src="/images/product/noproduct.jpg" height="80" width="80">'; } }, { data: 'name' }, { data: 'parent_name', render: function(data) { return data ?? '顶级分类'; } } ],
内容的提问来源于stack exchange,提问作者KatiaSisHost
相关产品推荐
相关产品推荐

