LaravelでEloquent ORMを使用してLIKEを使用したデータベースの検索を実行する


94

Eloquentのアクティブなレコード作成を使用して検索クエリを作成したいのですが、これはLIKE検索になります。User::find($term)またはを見つけましたUser::find(1)が、これはlikeステートメントを生成していません。私は直接的な答えを探しているわけではありませんが、誰かが少なくとも私に調べる方向を教えてくれるなら、それは素晴らしいことです!


2
laravel.com/docs/database/eloquent ..ドキュメントを使用できます。非常に明確です。
ytsejam 2012年

2
このページを見たことがありますが、ワイルドカードを使用した検索については何も表示されませんでした。また、何十万もの行があるため、foreachループで正規表現を設定したくありませんでした
Jonathan

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

それはドキュメントでは流暢なクエリビルダーと呼ばれています。
ytsejam 2012年

答えとあなたのコメントを答えとしてマークできれば、そうします。私を正しい方向
ジョナサン

回答:


235

次の構文でLIKEを使用すると、データベース検索を実行できます。

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

1
あまり効率的ではないため、「致命的エラー:関数のネストレベルの最大値「100」に達したため、中止します!」をスローします
Sasi varna kumar

@gsk(with()メソッドを使用して)参加すると、通常どおり列を検索できます。構文はおそらくのようなものですtable.field
Anthony

64

LIKEを頻繁に使用する必要がある場合は、問題を少し単純化できます。()のようなカスタムメソッドは、Eloquent ORMを継承するモデルで作成できます。

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

したがって、この方法をこのように使用できます。

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

これは、これを行うためのより「Laravel」的な方法です。それはただよりすっきりしていて、周りを回ってそれぞれを調整する必要がなく、1つの場所でスコープを調整できます->where()
Daniel Dewhurst

本当にこの答えが大好きです。これにより、モデルとその使用法が非常にエレガントになり、laravelとは異なります。
死刑執行人

29

参考までに、演算子のリスト(likeおよびその他すべてを含む)はコード内にあります。

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

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

免責事項:

ジョエルラーソンの答えは正しいです。私の賛成票を得ました。

私はこの答えが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'));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.