Laravel Eloquent:无需select为关联分类表id设置别名
如何在Laravel中避免关联查询的字段冲突并设置别名?
我完全懂你的困扰——直接用join关联blogs和categories表却不写select时,两个表的id字段会出现冲突,分类表的id会覆盖掉博客表的id,你想给分类表的id设置别名cat_id,但又不想手动把博客表的所有字段都罗列一遍,对吧?
这里有个非常合适的解决方案,用Laravel的addSelect()方法就能轻松搞定:
$data['rows'] = Blog::join('categories', 'blogs.category_id', '=', 'categories.id') ->addSelect('categories.id as cat_id') ->paginate($this->pagination_limit);
这个方法的优势:
- 默认情况下,
Blog::join()会自动选中blogs表的所有字段,不用你手动逐个编写; addSelect()会在默认查询的字段基础上,额外追加你指定的字段(也就是带别名的分类表id);- 既保留了博客表的全部字段,又给分类表的id设置了别名,彻底解决了字段覆盖的问题。
如果需要更灵活的字段控制,也可以用selectRaw()来实现,效果是一样的:
$data['rows'] = Blog::join('categories', 'blogs.category_id', '=', 'categories.id') ->selectRaw('blogs.*, categories.id as cat_id') ->paginate($this->pagination_limit);
不过addSelect()的写法更简洁,适合只追加少量字段的场景。
内容的提问来源于stack exchange,提问作者Umesh Kumar Yadav
相关产品推荐
相关产品推荐

