【问题标题】:Query for multiple fields with Laravel使用 Laravel 查询多个字段
【发布时间】:2014-12-19 10:08:02
【问题描述】:

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

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

【问题讨论】:

  • 如果其中一个答案对您有用,您应该接受它。接受会奖励您和回答的人积分。它还可以帮助与您有相同问题的人找到有效的答案。

标签: php mysql search laravel


【解决方案1】:

如果您使用where,如果您使用多个where,它将添加AND。但是我不知道在您的情况下您是否想使用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

【讨论】:

    【解决方案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() 实际上是根据 id 搜索记录,所以在这种情况下你不想使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-22
      • 2020-07-14
      • 1970-01-01
      • 2016-10-24
      • 2022-01-09
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      相关资源
      最近更新 更多