Laravel Eloquent比较列值

Jak*_*ena 29 laravel eloquent

where()当比较两个列值时,Eloquent 似乎不起作用.怎么解决?

示例代码:

->where('table_1.name', '=', 'table_2.name')
Run Code Online (Sandbox Code Playgroud)

但是工作:

->where('table_1.name', '=', 'john')
Run Code Online (Sandbox Code Playgroud)

Lim*_*nte 50

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

->whereRaw('table_1.name = table_2.name')
Run Code Online (Sandbox Code Playgroud)


小智 33

您可以使用where列:

->whereColumn('table_1.name', 'table_2.name')
Run Code Online (Sandbox Code Playgroud)

  • 您还可以传递比较运算符和/或多个条件的数组。例如-> whereColumn([['first_name','=','last_name'],['updated_at','>','created_at']]); (2认同)

Jak*_*ena 11

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

可能的解决方案:

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

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

    ->whereRaw('table_1.name = table_2.name')
    
    Run Code Online (Sandbox Code Playgroud)