【问题标题】:Laravel Eloquent Compare Column ValuesLaravel Eloquent 比较列值
【发布时间】:2015-07-31 14:58:57
【问题描述】:

在比较两列值时,Eloquent 的 where() 似乎不起作用。如何解决?

示例代码:

->where('table_1.name', '=', 'table_2.name')

但适用于:

->where('table_1.name', '=', 'john')

【问题讨论】:

标签: laravel eloquent


【解决方案1】:

这种情况下不需要转义,可以使用whereRaw():

->whereRaw('table_1.name = table_2.name')

【讨论】:

  • 不错。谢谢!除了您的解决方案外,我还回答了我的问题。当我的投票积分重新生成时,我会投票赞成你的答案。
  • 有什么方法可以使用“where”子句
【解决方案2】:

我想通了。 'table_2.name' 被解释为纯字符串,而不是 mysql 表列。

可能的解决方案:

  1. \DB::raw()包裹'table_2.name'

    ->where('table_1.name', '=', \DB::raw('table_2.name'))
    
  2. whereRaw() 包装整个表达式(基于@limonte 的回答)

    ->whereRaw('table_1.name = table_2.name')
    

【讨论】:

  • 是的。谢谢你。我刚刚添加了一个替代解决方案。不一定是更好的解决方案:)
【解决方案3】:

你可以使用 where 列:

->whereColumn('table_1.name', 'table_2.name')

【讨论】:

  • 只想补充一点,这个方法只在 laravel 5 中添加。如果你像我一样从事 laravel 4 项目,请在其他答案中使用方法。
  • 您还可以传递比较运算符和/或多个条件的数组。例如,->whereColumn([ ['first_name', '=', 'last_name'], ['updated_at', '>', 'created_at'] ]);
猜你喜欢
  • 2018-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 2014-09-12
  • 2014-09-28
  • 2016-03-18
相关资源
最近更新 更多