GROUP_CONCAT与FIND_IN_SET应该怎么在laravel里使用

SELECT `name` ,GROUP_CONCAT(cd_news_tag.name) from `cd_news_tag` left JOIN  `cd_news` on FIND_IN_SET(cd_news_tag.id , cd_news.news_tags) WHERE  cd_news.id = $id

语句是这样的

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

万能的 selectRaw()whereRaw()。再有,你这条语句在 MySQL 中会执行失败的,GROUP_CONCAT 需要在后面加 group by 分组才行。

2年前 评论
讨论数量: 2

万能的 selectRaw()whereRaw()。再有,你这条语句在 MySQL 中会执行失败的,GROUP_CONCAT 需要在后面加 group by 分组才行。

2年前 评论

简单尝试了下,可以这样写:

    $res = \App\Models\CdNewsTag::selectRaw('name, GROUP_CONCAT(cd_news_tag.name)')
    ->leftJoin('cd_news', function($join){
        $join->on(function($query){
            $query->whereRaw('FIND_IN_SET(cd_news_tag.id, cd_news.news_tags)');
        });
    })
    ->where('cd_news.id', $id)
    ->groupBy('cd_news_tag.name')
    ->get();

    dd($res);

拼接的 SQL 结果:

SELECT name, GROUP_CONCAT(cd_news_tag.name) FROM `cd_news_tag`
LEFT JOIN `cd_news` ON (FIND_IN_SET(cd_news_tag.id, cd_news.news_tags))
WHERE `cd_news`.`id` = ?
GROUP BY `cd_news_tag`.`name`
2年前 评论
LiamHao (作者) 2年前
Aqua5 (楼主) 2年前
Aqua5 (楼主) 2年前

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