Group_concat with Query builder laravel

时间:2017-12-06 16:46:57

标签: sql laravel mariadb query-builder laravel-5.5

您好! ,我有一个使用查询生成器在laravel 5.5上调用sql的问题。当我这样做时

    $result = DB::table(self::$TABLA_COMPONENTE)
        ->join(self::$TABLA_ARCHIVOS ,self::$TABLA_COMPONENTE.'.com_id','=',self::$TABLA_ARCHIVOS.'.com_id')
        ->select(self::$TABLA_COMPONENTE.'.*',DB::raw('group_concat('.self::$TABLA_ARCHIVOS.'.ar_url) as com_archivos'))
        ->where(self::$TABLA_COMPONENTE.'.com_id',$id)->first();

我收到以下错误

  

SQLSTATE [42000]:语法错误或访问冲突:1140如果没有GROUP BY子句,则GROUP GROUP列(MIN(),MAX(),COUNT(),...)的混合没有GROUP列是非法的( SQL:在componentecomponente内部加入archivos选择componente。*,group_concat(archivos.ar_url)作为com_archivos。com_id = archivoscom_id其中componentecom_id = 2限制1)

这是我使用 - > toSql()

获得的原始sql
This is the sql with ->toSql()

"select `componente`.*, group_concat(archivos.ar_url) as com_archivos from `componente` inner join `archivos` on `componente`.`com_id` = `archivos`.`com_id` where `componente`.`com_id` = ?

它在Phpmyadmin上工作正常。

我也尝试过使用Group by,但没有运气。

如果你能帮助我解决方案,我将非常感激!

1 个答案:

答案 0 :(得分:0)

这实际上是mysql问题而不是laravel问题。尝试添加

->groupBy(self::$TABLA_COMPONENTE . '.id')

给你查询。

编辑:类似这样的事情:

$result = DB::table(self::$TABLA_COMPONENTE)
    ->join(self::$TABLA_ARCHIVOS ,self::$TABLA_COMPONENTE.'.com_id','=',self::$TABLA_ARCHIVOS.'.com_id')
    ->select(self::$TABLA_COMPONENTE.'.*',DB::raw('group_concat('.self::$TABLA_ARCHIVOS.'.ar_url) as com_archivos'))
    ->groupBy(self::$TABLA_COMPONENTE . '.id')
    ->where(self::$TABLA_COMPONENTE.'.com_id',$id)->first();

注意:这不是testet