在Laravel中使用Eloquent ORM使用LIKE执行数据库搜索


94

我想使用Eloquent的活动记录构建来构建搜索查询,但这将是一个LIKE搜索。我已经找到User::find($term)User::find(1),但这并未生成类似语句。我不是在寻找直接的答案,但是如果有人至少可以给我一个指导的方向,那就太好了!


2
laravel.com/docs/database/eloquent ..可以使用的文档ıt非常清楚。
ytsejam 2012年

2
我已经看到了此页面,但是我只是没有看到有关使用通配符进行搜索的任何信息。我也不想在foreach循环中设置正则表达式,因为有成千上万的行
Jonathan

$ email = DB :: table('users')-> where('id','=',1)-> only('email');
ytsejam 2012年

它在文档中被称为流利的查询生成器。
ytsejam 2012年

如果我可以将答案和您的评论标记为答案,我会的。谢谢您让我朝正确的方向前进
乔纳森(Jonathan)

Answers:


235

您可以使用LIKE通过以下语法进行数据库查找:

Model::where('column', 'LIKE', '%value%')->get();

1
效率不高,抛出“致命错误:达到最大功能嵌套级别'100',正在中止!” ...
Sasi varna kumar

@gsk我想您加入了(使用with()方法),然后您可以照常搜索列。语法可能类似于table.field
安东尼

64

如果您需要经常使用LIKE,则可以稍微简化一下问题。可以在继承Eloquent ORM的模型中创建类似()的自定义方法:

public  function scopeLike($query, $field, $value){
        return $query->where($field, 'LIKE', "%$value%");
}

因此,您可以按以下方式使用此方法:

User::like('name', 'Tomas')->get();

这是更“ Laravel”的方式。它更清洁,可让您在一个地方调整范围,而不必四处调整->where()
丹尼尔·德赫斯特

真的很喜欢这个答案。这使得该模型及其用法非常优雅,这就是laravel所要解决的问题。
deathemperor '18

29

仅供参考,运算符列表(包含like和所有其他运算符)在代码中:

/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php

protected $operators = array(
    '=', '<', '>', '<=', '>=', '<>', '!=',
    'like', 'not like', 'between', 'ilike',
    '&', '|', '^', '<<', '>>',
    'rlike', 'regexp', 'not regexp',
);

免责声明:

乔尔·拉尔森(Joel Larson)的答案是正确的。得到我的支持。

我希望这个答案能更好地说明通过Eloquent ORM提供的功能(指出正确的直接人员)。虽然到文档的链接会越好,这种联系已经证明自己是难以捉摸的。


18

使用双引号而不是单引号,例如:

where('customer.name', 'LIKE', "%$findcustomer%")

下面是我的代码:

public function searchCustomer($findcustomer)
{
    $customer = DB::table('customer')
                  ->where('customer.name', 'LIKE', "%$findcustomer%")
                  ->orWhere('customer.phone', 'LIKE', "%$findcustomer%")
                  ->get();

    return View::make("your view here");
}

3

如果您不喜欢像我这样的双引号,那么单引号将对您有用:

$value = Input::get('q');
$books = Book::where('name', 'LIKE', '%' . $value . '%')->limit(25)->get();

return view('pages/search/index', compact('books'));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.