使用laravel查询构建器的字段常量

use*_*065 7 mysql laravel

使用laravel/fluent查询构建器,我试图使一个常量字段值通过以后订购的联合(ed)选择.我还没有找到配方,以流利的方式做到以下几点.工会很简单,但你如何让这个领域不断发挥作用呢?

想象一下两个简单的表(省略)和一个联合选择:

select field1, field2, 'type1' as field3 from table1
UNION
select field1, field2, 'type2' as field3 from table2
ORDER BY field2
Run Code Online (Sandbox Code Playgroud)

到目前为止,我提出的最佳答案是使用带有我自己制造的查询字符串的DB ::查询.考虑到我尝试过的测试用例,Laravel/fluent似乎还没准备好处理这种情况.使用RAW进行选择很有效,直到您尝试订购一对选定的表查询.

SELECT field1, field2 FROM 
(
  SELECT fld1A as field1, 'FOO' as field2 from table1 
  UNION ALL
  SELECT fld2A as field1, 'BAR' as field2 from table2 
)
temp_table order by somefield
Run Code Online (Sandbox Code Playgroud)

Ant*_*iro 10

这样,大概:

$users = DB::table('users')
            ->select(DB::raw("'FOO' as field2"))
            ->get();
Run Code Online (Sandbox Code Playgroud)


小智 10

使用Laravel 4,并使用GROUP BY而不是ORDER BY我相信你可以这样做:

$t1 = DB::table('table1')
   ->select('field1',DB::raw("'FOO' as field2"))
   ->groupBy('field2');
$t2 = DB::table('table2')
   ->select('field1',DB::raw("'BAR' as field2"))
   ->groupBy('field2');
$result = $t1->union($t2)->get();
Run Code Online (Sandbox Code Playgroud)

我发现$t1在这种情况下可以是Illuminate\Database\Query\Builder或的实例Illuminate\Database\Eloquent\Builder,但是union参数($t2)必须是类型Illuminate\Database\Query\Builder.

这意味着您可以使用以下内容进行预先加载:

$t1 = MyTableModel::with('table3')->select...