在laravel查询构建器中选择具有2列相等值的行

Mre*_*ari 5 laravel

我想编写一个查询,选择1个实体中2个属性具有相同值的行.

这将是在原始SQL中执行此操作的示例:

Select * from users u where u.username = u.lastname
Run Code Online (Sandbox Code Playgroud)

laravel是否有任何方法可以将2列名称作为参数并返回匹配结果?

Ser*_*hiv 30

你需要的是一个DB::raw表达式:

DB::table('users')
    ->where('username', '=', DB::raw('lastname'))
    ->get();
Run Code Online (Sandbox Code Playgroud)

DB::raw实际上唯一能做的就是告诉查询解释器不要'lastname'像对待任何其他字符串值那样对待,而只是在SQL中插入它.

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


cee*_*yoz 5

在Laravel 5中,现在 有了whereColumn更清洁的代码:

Users::whereColumn('username', 'lastname')->get();
Run Code Online (Sandbox Code Playgroud)

  • 这仅从 laravel 5.2 开始可用,例如在 5.1LTS 中不可用。不知道为什么@ceejayoz 拒绝了我的编辑。答案不准确,因为此功能在“laravel 5”中不可用。 (3认同)