2015-05-19 4 views
15

Eloquent's where() кажется неработоспособным при сравнении двух значений столбца. Как это исправить?Laravel Eloquent Compare Column Values ​​

Пример кода:

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

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

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

вы можете принять мой ответ для дальнейших читателей, если это было полезно :) –

+0

Возможной Дубликат [Сравнить два Colonne для некоторой таблицы с красноречивой Laravel] (HTTP: // StackOverflow. com/вопросы/25311540/compare-two-colonne-for-some-table-with-eloquent-laravel) –

ответ

30

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

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

Nice. Благодаря! Я также ответил на мой вопрос в дополнение к вашему решению. Я проголосую за ваш ответ, когда мои голоса будут восстановлены. –

+0

есть ли способ сделать это, используя «где». Пункт –

11

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

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

  1. Wrap 'table_2.name' с \DB::raw()

    ->where('table_1.name', '=', \DB::raw('table_2.name')) 
    
  2. Wrap все выражения с whereRaw() (на основе @ limonte Ответим)

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

'whereRaw()' является более читаемым вариантом. –

+1

Да. Спасибо. Я просто добавил альтернативное решение. Не обязательно лучшее решение :) –

+0

приветствую :) –

9

Вы можете использовать где колонок:

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

Просто хочу добавить, что этот метод добавляется только в laravel 5. Используйте метод в другом ответе, если вы работаете над проектом laravel 4, таким как я. – cytsunny