我想创建类似的东西:
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());
答案 0 :(得分:2)
这应该适合你:
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()
方法会指示查询构建器开始一个约束组。Closure
将收到一个查询构建器实例,您可以使用它来设置应该的约束包含在括号内。
Docs(称为参数分组的部分)