Eloquent::when() -- 不再使用 if-else

 Eloquent::when() -- 不再使用 if-else

很多人都喜欢使用"if-else"来写查询条件,像这样:

if (request('filter_by') == 'likes') {
    $query->where('likes', '>', request('likes_amount', 0));
}if (request('filter_by') == 'date') {
    $query->orderBy('created_at', request('ordering_rule', 'desc'));
}

有一种更好的方法 -- 使用 when

$query = Author::query();$query->when(request('filter_by') == 'likes', function ($q) {
        return $q->where('likes', '>', request('likes_amount', 0));
    });
    $query->when(request('filter_by') == 'date', function ($q) {
        return $q->orderBy('created_at', request('ordering_rule', 'desc'));
    });

它可能看上去不是很优雅,但它强大的功能是传递参数:

$query = User::query();
$query->when(request('role', false), function ($q, $role) {
    return $q->where('role_id', $role);
});
$authors = $query->get();

 Eloquent::when() -- 不再使用 if-else

喜欢(0)

评论 抢沙发

表情