Laravel Eloquent Сравните значения столбцов

Eloquent where() кажется, не работает при сравнении двух значений столбца. Как это исправить?

Пример кода:

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

Но работает над:

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

Ответы

Ответ 1

В этом случае Escaping не нужно, вы можете использовать whereRaw():

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

Ответ 2

Я понял это. 'table_2.name' интерпретируется как простая строка, а не столбец таблицы mysql.

Возможные решения:

  • Оберните 'table_2.name' с помощью \DB::raw()

    ->where('table_1.name', '=', \DB::raw('table_2.name'))
    
  • Оберните все выражение с помощью whereRaw() (на основе ответа @limonte)

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

Ответ 3

Вы можете использовать столбец:

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