如何在 Laravel 中使用 GROUP_CONCAT

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/40486296/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 17:33:56  来源:igfitidea点击:

how to use GROUP_CONCAT in laravel

laravellaravel-5.2

提问by Dipankar Naskar

$assignment = assignment::find(Crypt::decrypt($id));
$assignment_details = $assignment->raw_plan()->groupBy('flag')->get();

I want to following result of this query in laravel

我想在 Laravel 中跟踪此查询的结果

SELECT GROUP_CONCAT(name) AS 'names' FROM `raw_plans` where `assignment_id` = 1 GROUP BY`flag`

Please suggest me how to use GROUP_CONCAT in laravel

请建议我如何在 Laravel 中使用 GROUP_CONCAT

回答by Amit Gupta

You can use relations as query builder to fetch the results as:

您可以使用关系作为查询构建器来获取结果:

$assignment_details = $assignment->raw_plan()
                                ->select(DB::raw('group_concat(name) as names'))
                                ->where('assignment_id', 1)
                                ->groupBy('flag')
                                ->get();

Update

更新

Use table_name.*in select to get all the fields.

table_name.*在 select 中使用以获取所有字段。

$assignment_details = $assignment->raw_plan()
                                ->select('raw_plans.*', DB::raw('group_concat(name) as names'))
                                ->where('assignment_id', 1)
                                ->groupBy('flag')
                                ->get();

回答by shoieb0101

Try with below code

尝试使用以下代码

$data = DB::table('raw_plans')
            ->select(DB::raw("GROUP_CONCAT(name SEPARATOR '-') as `names`"))
            ->groupBy('flag')
           ->where('assignement_id',1)
            ->get();

回答by Saumya Rastogi

shoieb is somewhat right, but you should give table name before accessing column names in DB:raw()

shoieb 有点正确,但您应该在访问列名之前给出表名 DB:raw()

You should try this:

你应该试试这个:

$data = DB::table('raw_plans')
            ->select(DB::raw("group_concat(raw_plans.name)"))
            ->groupBy('flag')
            ->where('assignement_id',1)
            ->get();

Hope this helps.

希望这可以帮助。

回答by Nazmul Hasan

Try this

尝试这个

$sql = "SELECT GROUP_CONCAT(name) AS 'names' FROM `raw_plans` where  `assignment_id` = 1 GROUP BY`flag`";

  $info = DB::select(DB::raw($sql));