【问题标题】:field constant using laravel query builder使用 laravel 查询生成器的字段常量
【发布时间】:2013-06-01 18:32:25
【问题描述】:

使用 laravel/fluent 查询生成器,我试图为随后排序的 union(ed) 选择传递一个常量字段值。我还没有找到用流利的方式完成以下操作的方法。联合很简单,但是如何让字段常量起作用?

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

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

到目前为止,我想出的最佳答案是将 DB::query 与我自己制造的查询字符串一起使用。鉴于我尝试过的测试用例,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

【问题讨论】:

标签: mysql laravel


【解决方案1】:

这样,大概:

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

【讨论】:

    【解决方案2】:

    使用 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 的实例,但联合参数($t2)必须是Illuminate\Database\Query\Builder 类型。

    这意味着您可以使用像这样的预加载:

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

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 2018-07-03
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      相关资源
      最近更新 更多