Laravel Eloquent搜索两个可选字段

tma*_*314 1 php laravel eloquent

我正在尝试使用eloquent搜索两个可选表:

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

当用户执行空搜索时,这适用于返回所有结果,但我不确定如何调整此值以在存在时搜索bandname,反之亦然.

vFr*_*sop 10

只是为了解释下面的答案会发生什么:

Eloquent在这里做了一件棘手的事情:当你调用User::where(...)它时,返回一个Database\Query对象.这与DB::table('users')->where(...)构建SQL查询的可链接对象基本相同.

所以有:

// 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();
Run Code Online (Sandbox Code Playgroud)