【问题标题】:Use DB::raw() with Table prefix使用带表前缀的 DB::raw()
【发布时间】:2017-02-16 06:13:14
【问题描述】:

我会使用 Laravel 5 Query Builder 在查询中进行 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();

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

"Column not found: 1054 Unknown column 'table1.count' "

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

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

它工作,所以问题是前缀,但我不喜欢这种方法,所以: 有没有不指定前缀表使用 DB::Raw 的方法?

【问题讨论】:

  • 该表前缀是否适用于所有表?
  • 如果您的数据库中的所有表都有前缀 then.. Check this link it can help you
  • 是的,所有表都有前缀,我已经在database.php中设置了正确的前缀

标签: php laravel laravel-5 laravel-query-builder


【解决方案1】:

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();


参考:

【讨论】:

  • 好的,所以我必须放前缀!完美,感谢您的解释!
猜你喜欢
  • 2013-04-17
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 2010-12-08
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多