使用 Laravel Eloquent 创建嵌套的 OR 条件

Create nested OR condition using Laravel Eloquent

我想创建类似的东西:

select * from documents where 'chapter'=3 and 'section'=4 and ('title' like '%abc% OR 'desc' like %abc%);

如何使用 Eloquent 执行此操作?我试过使用 Eloquent 的 whereOr 方法,但在生成的 SQL 中似乎没有任何作用。但是,即使他们这样做了,我也不确定我当前的代码是否会让他们像我正在寻找的那样嵌入。

我得到的一些东西:

    $docSearch = DB::table('documents');

    if ($chapter > 0) {
        $docSearch->where('chapter', $chapter);
    }

    $existingManagementArray = Management::getAllManagementIDsAsArray();
    if ($management_id > 0 && in_array($management_id, $existingManagementArray)) {
        $docSearch->where('management_id', $management_id);
    } else {
        $docSearch->whereIn('management_id', $existingManagementArray);
    }

    if (strlen($term) > 0) {
        //HELP! These don't seem to change the SQL
        $docSearch->whereOr('title', 'like', "%$term%"); 
        $docSearch->whereOr('desc', 'like', "%$term%");
    }

    DB::enableQueryLog();
    $allFoundDocs = $docSearch->get();
    dd(DB::getQueryLog());

这应该适合你:

DB::table('documents')->where('chapter', 3)
    ->where('section', 4)
    ->where(function($q) use($abc) {
        $q->where('title', 'like', '%'.$abc.'%')
          ->orWhere('desc', 'like', '%'.$abc.'%');
    })->get();

Closure 传递到 where() 方法指示查询构建器开始约束 group.The Closure 将接收一个查询构建器实例,您可以使用它来设置应包含在括号组中的约束。

Docs(称为参数分组的部分)