我正在尝试使用Eloquent ORM在Laravel 4中构建一个查询,它简单地匹配条件中的所有字段。我有下面的代码,它目前返回的数据符合任何条件,而不是所有条件,如果你愿意,则代替AND。
$names = Input::get('names');
$company = Input::get('company');
$contacts = Contact::where(function($query) use ($names, $tags, $type, $sector, $company)
{
if (!empty($names)) {
$query->where('firstname', 'LIKE', "%{$names}%")
->orWhere('lastname', 'LIKE', "%{$names}%");
}
if (!empty($company)) {
$query->where('company', 'LIKE', "%{$company}%");
}
})
->paginate(100);
return View::make('index')->with('contacts', $contacts)->with('searchingFlag', $searchingFlag)->with('names', $names)->with('tags', $tags)->with('type', $type)->with('sector', $sector)->with('company', $company);
因此,我认为,我在这里所做的就是声明结果必须与名称字段和公司字段匹配,如果设置了任何一个,但是如上所述返回的结果与任何一个子句匹配而不是两者都匹配。
任何人都可以帮我找出错误吗?
由于
答案 0 :(得分:1)
你需要筑巢:
if (!empty($names)) {
$query->where(function ($q) use ($names) {
$q->where('firstname', 'LIKE', "%{$names}%")
->orWhere('lastname', 'LIKE', "%{$names}%");
}
}
这将导致:
SELECT ... WHERE (firstname like .. OR lasname like ..) AND company ...
答案 1 :(得分:1)
if(!empty($names)) {
$query->whereRaw('firstname LIKE "%{$names}%" OR lastname LIKE "%{$names}%" ');
}