使用Laravel查询多个字段

时间:2014-10-23 16:48:22

标签: php mysql search laravel

所以我正在尝试创建搜索功能,以便您可以查询名字和姓氏。我可以将哪些用作查询的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}%")

但这也不起作用。任何建议都会很棒!感谢。

2 个答案:

答案 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