所以我正在尝试创建搜索功能,以便您可以查询名字和姓氏。我可以将哪些用作查询的AND语句?
public function find()
{
$search = Input::get('contact_search');
$query = Contact::orderBy('name', 'desc');
if (is_null($search))
{
$contacts = $query->paginate(15);
//return View::make('contacts.index')->with(array('contacts' => $contacts));
} else {
$contacts = $query->where('firstName', 'LIKE', "%{$search}%")
->orWhere('lastName', 'LIKE', "%{$search}%")
->paginate(15);
$contact = Contact::find(1);
}
return View::make('hello')->with(array('contacts' => $contacts));
}
我试过了
$query->where('firstName', 'LIKE', "%{$search}%")
->Where('lastName', 'LIKE', "%{$search}%")
但这也不起作用。任何建议都会很棒!感谢。
答案 0 :(得分:2)
where()
已充当and
声明。把它们连在一起吧。
$people = People::where('first_name','=','John')->where('last_name','=','Doe')->get();
在您的查询中,您有->Where
。确保它的小写。
此外,您的方法可以使用一些优化。您正在搜索多个联系人并对结果进行分页,但由于某种原因您正在执行find(1)
。更好的方法是执行以下操作:
$contact = Contact::orderBy('name','desc')
->where('firstName', 'LIKE', "%{$search}%")
->where('lastName', 'LIKE', "%{$search}%")
->first();
这将返回结果中的第一个联系人。不需要分页。 find()
实际上会根据内容搜索记录,因此您不想在这种情况下使用该记录。
答案 1 :(得分:1)
如果您使用where
,如果您使用多个AND
,则会添加where
。但是我不知道在你的情况下你是否想使用AND
,因为如果有人将表格Jo
,你将在名字和姓氏中搜索帽子Jo
,例如,因为他的姓氏不包含John Smith
,所以在这里找不到Jo
。
回答你可以使用的问题:
$contacts = $query->where('firstName', 'LIKE', "%{$search}%")
->where('lastName', 'LIKE', "%{$search}%")
->paginate(15);
但可能这没有多大意义。
很难说你到底做了什么,因为你在这里:
$contacts = $query->where('firstName', 'LIKE', "%{$search}%")
->orWhere('lastName', 'LIKE', "%{$search}%")
->paginate(15);
$contact = Contact::find(1);
首先使用这两行,您会找到名字中包含$search
并对其进行分页的人,并在使用Contact::find(1);
时找到ID为1
的人。它似乎也不是一个好的解决方案。
如果您想找到名字中包含$search
的第一条记录,您应该使用:
$contacts = $query->where('firstName', 'LIKE', "%{$search}%")
->where('lastName', 'LIKE', "%{$search}%")
->first();
没有orWhere
且没有paginate
。