2014-09-20 70 views
5

我想編寫一個查詢,選擇來自1個實體的2個屬性具有相同值的行。在laravel中選擇等於2列的行查詢生成器

這將是在原始SQL這樣的例子:

Select * from users u where u.username = u.lastname 

是否laravel有拿2列名作爲參數,並返回匹配結果的任何方法?

回答

23

你需要的是一個DB::raw表達:

DB::table('users') 
    ->where('username', '=', DB::raw('lastname')) 
    ->get(); 

唯一DB::raw實際上,它只是告訴查詢解釋治療'lastname'像任何其他字符串值,但只是插值它在SQL,因爲它是。

http://laravel.com/docs/queries#raw-expressions

1

在Laravel 5,有nowwhereColumn此,對於清潔器的代碼:

Users::whereColumn('username', 'lastname')->get(); 
+0

這僅僅是因爲laravel 5.2可用,而不是在5.1LTS例如。不知道爲什麼@ceejayoz拒絕了我的編輯。答案並不準確,因爲這個功能在「laravel 5」中不可用。 – rrrafalsz 2018-03-02 15:41:58

+0

@rrrafalsz'whereColumn'在所有當前支持的Laravel版本中。 5.1的支持在2017年6月結束。 – ceejayoz 2018-03-02 15:44:24