1

雄弁を使用して2つのオプションのテーブルを検索しようとしています:

$users  = User::where('ProfileType', '=', 2)
                ->where(function($query) {
                    $query->where('BandName', 'LIKE', "%$artist%");
                    $query->or_where('Genre', 'LIKE', "%$genre%");
                })->get();

これは、ユーザーが空の検索を行ったときにすべての結果を返すのに問題なく機能しますが、バンド名が存在するときにバンド名を検索するように調整する方法がわかりません。

4

4 に答える 4

10

以下の答えで何が起こるかを説明するだけです:

Eloquent はここでトリッキーなことを行います。呼び出すと、 Database\ QueryオブジェクトUser::where(...)が返されます。これは基本的に、SQL クエリを構築するための連鎖可能なオブジェクトである と同じです。DB::table('users')->where(...)

だから持っている:

// Instantiates a Query object
$query = User::where('ProfileType', '=', '2');
$query->where(function($query) {
    // Adds a clause to the query
    if ($artist = Input::get('artist')) {
        $query->where_nested('BandName', 'LIKE', "%$artist%", 'OR');
    }
    // And another
    if ($genre = Input::get('genre')) {
        $query->where_nested('Genre', 'LIKE', "%$genre%", 'OR');
    }
});

// Executes the query and fetches it's results
$users = $query->get();
于 2013-03-06T18:14:11.813 に答える
2

ヴィニシウスの答えに基づいて構築すると、うまくいったのは次のとおりです。

// Instantiates a Query object
$query = User::where('ProfileType', '=', '2');

// Adds a clause to the query
if ($artist = Input::get('artist')) {
    $query->where('BandName', 'LIKE', "%$artist%");
    // Temp Usernamesearch
    $query->or_where('NickName', 'LIKE', "%$artist%");
}

// Genre - switch function if artist is not empty
if ($genre = Input::get('genre')) {
    $func = ($artist) ? 'or_where' : 'where';
    $query->$func('Genre', 'LIKE', "%$genre%");
}

// Executes the query and fetches it's results
$users = $query->get();

$artist が設定されていない場合にのみ、2 番目のオプション フィールドで or_where を使用する必要があることがわかります。

ご協力いただきありがとうございます

于 2013-03-06T20:29:30.583 に答える
1

これがあなたの求めているものだと思います。あなたのビューには、アーティスト/ジャンルを検索するためのフォームがあり、どちらか一方を設定するか、両方を設定するか、または何も設定できません。

$users = User::where('ProfileType', '=', 2);

if (Input::has('artist')) {
    $users = $users->where('BandName', 'LIKE', '%'.Input::get('artist').'%');
}

if (Input::has('genre')) {
    $users = $users->where('Genre', 'LIKE', '%'.Input::get('genre').'%');
}

$users = $users->get();
于 2013-03-05T21:50:52.097 に答える