首页 文章

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

提问于
浏览
6

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

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

select field1, field2, 'type1' as field3 from table1
UNION
select field1, field2, 'type2' as field3 from table2
ORDER BY field2

到目前为止,我提出的最佳答案是使用带有我自己制造的查询字符串的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

2 回答

  • 8

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

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

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

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

  • 3

    这样,可能:

    $users = DB::table('users')
                ->select(DB::raw("'FOO' as field2"))
                ->get();
    

相关问题