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

时间:2012-11-14 20:29:39

标签: orm laravel eloquent sql-like

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

5 个答案:

答案 0 :(得分:226)

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

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

答案 1 :(得分:62)

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

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

那么你可以这样使用这个方法:

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

答案 2 :(得分:28)

仅供参考,运营商列表(包含喜欢和所有其他运营商)在代码中:

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

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

声明:

Joel Larson的回答是正确的。得到了我的upvote。

我希望这个答案可以通过Eloquent ORM(指向正确的人)提供更多信息。虽然文档的链接会更好,但这种联系已证明是难以捉摸的。

答案 3 :(得分:16)

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

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");
}

答案 4 :(得分:3)

如果你不喜欢像我这样的双引号,这对你来说只用单引号:

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

return view('pages/search/index', compact('books'));