首页 > 解决方案 > 编写此查询的正确方法是什么?

问题描述

我有一个查询没有返回它应该返回的所有结果。我正在使用 Laravel,但是如果我直接在 PHPMyAdmin 中编写查询,结果是一样的:

clientpages::selectRaw('page as value, COUNT(ID) as `count`')
            ->where('page', 'like', '%blog%')
            ->orWhere('page', 'like', '%home%')
            ->whereBetween('date', [$range['from'], $range['to']]);

问题是查询只处理第一个like。它只返回其中包含的页面,blog而不返回带有home. 罪魁祸首是日期条件。如果我删除它,它会按预期工作,但是同时使用这三个条件的正确方法是什么?

标签: mysqllaravel

解决方案


就像您将普通的 SQL 查询包装在括号中一样,您可以在 Laravel 中执行相同的操作,如下所示:

clientpages::selectRaw('page as value, COUNT(ID) as `count`')
            ->where(function($query) {
                $query->where('page', 'like', '%blog%')
                ->orWhere('page', 'like', '%home%')
            })
            ->whereBetween('date', [$range['from'], $range['to']]);

推荐阅读