使用带有表前缀的 DB::raw()

Lor*_*rti 2 php laravel laravel-5 laravel-query-builder

我想用Laravel 5查询生成器在查询中做一个 SUM 。

return DB::table('table1')->join('table2','table1.id','=','table2.id')
            ->where('table1.user_id','=',$userId)
            ->whereMonth('table2.date', '=', $month )
            ->whereYear('table2.date', '=', $year )->select('table2.*', DB::raw('SUM(table1.count) AS count_single'))->groupby('table2.id')->get();
Run Code Online (Sandbox Code Playgroud)

但我的问题是我有一个前缀表(xc_),并且 DB::raw 返回错误

"Column not found: 1054 Unknown column 'table1.count' "
Run Code Online (Sandbox Code Playgroud)

这是前缀表的问题,因为如果我把:

$table_prefix = env('DB_TABLE_PREFIX', 'xc_');
DB::raw('SUM('.$table_prefix.'table1.count) AS count_single')
Run Code Online (Sandbox Code Playgroud)

它有效,所以问题是前缀,但我不喜欢这种方法,所以:有一种方法可以使用 DB::Raw 而不指定前缀表?

Rau*_*pta 7

DB::raw()用于创建原始表达式,因此您必须使用完整的表名。

Laravel Query Builder 有一个用于获取表前缀的内置函数 DB::getTablePrefix()

用这个替换上面的代码,它会起作用。

return DB::table('table1')
                ->join('table2', 'table1.id', '=', 'table2.id')
                ->where('table1.user_id', '=', $userId)
                ->whereMonth('table2.date', '=', $month)
                ->whereYear('table2.date', '=', $year)
                ->select('table2.*', DB::raw('SUM(' . DB::getTablePrefix() . 'table1.count) AS count_single'))
                ->groupby('table2.id')
                ->get();
Run Code Online (Sandbox Code Playgroud)


参考: