在具有多个条件的Laravel中编写查询

在具有多个条件的Laravel中编写查询,laravel,eloquent,Laravel,Eloquent,我需要在Laravel中转换下面的查询。有人能帮忙吗 选择* 从测试表 式中(pttid不在5或(pttid=6且为!=1)) 和(草皮在'2019-01-01'和'2019-01-01'之间| |更新在'2019-01-01'和'2019-01-01'之间) 假设您有一个TestTable模型,您的查询可以是: $result = TestTable::select(['*']) ->where(function($q) { $q->where('pttid

我需要在Laravel中转换下面的查询。有人能帮忙吗

选择*
从测试表
式中(pttid不在5或(pttid=6且为!=1))
和(草皮在'2019-01-01'和'2019-01-01'之间| |更新在'2019-01-01'和'2019-01-01'之间)

假设您有一个
TestTable
模型,您的查询可以是:

$result = TestTable::select(['*'])
    ->where(function($q) {
        $q->where('pttid', 'NOT IN', 5);
        $q->orWhere(function($q2) {
            $q2->where('pttid', '=', 6);
            $q2->where('is', '!=', 1);
        });
    })->where(function ($q3) {
        $q3->whereBetween('sod', ['2019-01-01', '2019-01-01']);
        $q3->orWhereBetween('updat', ['2019-01-01', '2019-01-01']);
    })->get();

以最干净的方式执行此操作:

  • 以以下方式创建
    TestTable
    模型:
命令

php artisan make:model TestTable
  • 然后在控制器中通过它的名称调用它
代码

  • 最后,用以下方式编写查询:
代码:

要过滤日期,请同时使用两种方法:
whereBetween
或whereBetween

尽管通过
DB
facade调用表名,但始终尝试使用模型,因为这会使维护代码更加困难

use TestTable;
$data = TestTable::select('*')
            ->whereRaw("pttid NOT IN 5 OR (pttid = 6 AND is != 1)")
            ->whereBetween('sod', ["2019-01-01", "2019-01-01"])
            ->orWhereBetween('updat', ["2019-01-01", "2019-01-01"])
            ->get();