Laravel 查询构建器条件与当前查询使用时

Posted

技术标签:

【中文标题】Laravel 查询构建器条件与当前查询使用时【英文标题】:Laravel Query builder condition with current query using when 【发布时间】:2020-09-09 02:37:01 【问题描述】:

如何使用 laravel 查询生成器使用当前查询创建条件,是否有可能,我想它看起来像这样

$record = $this->repository
   ->where('value', $value)
   ->when($thisQuery->get()->isNotEmpty(), static function()
    //execute
    );

【问题讨论】:

SQL 查询会是什么样子?您要求在运行查询之前获取查询结果,这令人困惑 我在想我可以在 where() 之后获取当前值,以检查它是否不为空,我可以搜索并使用 if 语句,只是好奇它是否可能使用类似的东西: ) 您确实必须分两步完成,正如您提到的 2 个不同的查询 谢谢@ChristopheHubert,然后我会调查这个或子查询:) 【参考方案1】:

您可以在匿名函数中使用子查询,如下例所示:

 $record = $this->repository
            ->where('value', $value)
            ->where(function($query) 
                /** @var $query Illuminate\Database\Query\Builder  */
                return $query->where('foo', 'LIKE', '%foooo%')
                             ->orWhere('foo', 'bar');
            )
            ->get();

您也可以运行多个 where 子句,如下所示:

 $record = $this->repository
            ->where('value', $value)
            ->where('foo', 'bar')
            ->get();

并取决于requirements 使用适当的方式。

【讨论】:

以上是关于Laravel 查询构建器条件与当前查询使用时的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 查询构建器与雄辩的关系

与 laravel 在处理数百万条记录时使用块的普通查询构建器相比,Laravel Eloquents 和使用块是不是更慢?

Laravel 雄辩与查询构建器的优缺点

Laravel 查询构建器与 where 左外连接

在 laravel 查询构建器中使用多个 where 子句

在执行查询之前,如何从 Laravel 的查询构建器中获取原始查询字符串?