0

我只是好奇是否有等效于when()查询的 switch-case

我希望这段代码默认使用 when() (如果没有使用“when”)

public function scopeSortBy(Builder $query, $field, $dir = 'asc')
{
    switch ($field) {

        case 'fullName':
            $query->orderBy('last_name', $dir)
                ->orderBy('first_name', 'asc');
            break;

        case 'custom_sort_1':
            // Need to implement

            break;


        case 'custom_sort_2':
            // Need to implement

            break;

        default:
            $query->orderBy($field, $dir);
    }

    return $query;
}
4

1 回答 1

0

有一种when方法可用,因此您可以将查询修改为

public function scopeSortBy(Builder $query, $field, $dir = 'asc')
{
    $query->when(! empty($field), function ($query) use ($dir) {
        $query->orderBy($field, $dir);
    });

    $query->when($field == 'fullName', function ($query) use ($dir) {
        $query->orderBy('last_name', $dir)
            ->orderBy('first_name', $dir);
    })

    return $query;
}
于 2020-06-22T03:45:24.760 回答