laravel 使用原生表达式增加原数据表不存在的字段

比如我现在需要将两个表合在一起,这就需要一个两个表各增加一个标志字段来区分合成后的数据来自哪个表,比如两个表各加一个"1 as type" 和 "2 as type"这样就可以根据type来区分某条记录是来自哪个表了,但是直接用select方法这么写:

Foo::select(['1 as type'])...

会报错:

SQLSTATE[42S22]: Column not found: 1054 Unknown column '1' in 'field list':select `1` as `type` from

细心的你会发现1的周围多了个“符号,该符号是laravel自动加到字段上的,然后sql就会认为1应该是表user的一个字段,否则就会报错,怎么去掉“呢,用原生的就可以了

原生表达式

有时候你可能需要在查询中使用原生表达式,使用 DB::raw 方法可以创建原生表达式:

$users = DB::table('users')
                     ->select(DB::raw('count(*) as user_count, status'))
                     ->where('status', '<>', 1)
                     ->groupBy('status')
                     ->get();

{note} 原生表达式将会被当作字符串注入到查询中,所以要小心避免创建 SQL 注入漏洞。

发表回复

您的电子邮箱地址不会被公开。