2015-05-19 11 views
15

Eloquent's where() wydaje się nie działać podczas porównywania dwóch wartości kolumn. Jak to naprawić?Laravel Epoquillment Porównywanie wartości kolumn

Przykładowy kod:

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

ale działa na:

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

można przyjąć moją odpowiedź dla kolejnych czytelników, jeśli było pomocne :) –

+0

Możliwy duplikat [porównać dwa Colonne jakiegoś stole z wymownym laravel] (http: // stackoverflow. com/questions/25311540/compare-two-colonne-for-some-table-with-eloquent-laravel) –

Odpowiedz

30

ucieczki jest konieczne w tym przypadku można użyć whereRaw():

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

Nice. Dzięki! Odpowiedziałem także na moje pytanie oprócz twojego rozwiązania. Będę głosować w górę twoją odpowiedź, gdy moje kredyty głosowe się zregenerują. –

+0

jest jakiś sposób to zrobić, używając "where" klauzula –

11

I zdobione. 'table_2.name' interpretowany jest jako zwykły ciąg znaków, a nie kolumna tabeli mysql.

Możliwe rozwiązania:

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

    ->where('table_1.name', '=', \DB::raw('table_2.name')) 
    
  2. Wrap całego wyrażenia z whereRaw() (na podstawie odpowiedzi użytkownika @ limonte)

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

'whereRaw()' jest bardziej czytelna opcja. –

+1

Tak. Dziękuję Ci. Właśnie dodałem alternatywne rozwiązanie. Niekoniecznie lepsze rozwiązanie :) –

+0

serdecznie zapraszamy :) –

9

Można użyć gdzie kolumna:

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

Po prostu chcę dodać, że ta metoda jest dodana tylko w laravel 5. Użyj metody w innej odpowiedzi, jeśli pracujesz nad projektem typu laravel 4, takim jak ja. – cytsunny

Powiązane problemy