Laravel api: как получить только некоторые поля и отсортировать ответ - PullRequest
0 голосов
/ 30 июня 2018

Я хотел бы знать, правильно ли я все делаю.

Допустим, у меня есть таблица "стран". Чтобы получить только некоторые поля этой таблицы, в определенном порядке, у меня есть этот URL:

/ страны? = Поля ID, COUNTRY_NAME и убывание = COUNTRY_NAME

И результат ясен:

[
    {
        "id": "SP",
        "country_name": "Spain"
    },
    {
        "id": "IT",
        "country_name": "Italy"
    },
    {
        "id": "FR",
        "country_name": "France"
    },
    {
        "id": "CN",
        "country_name": "China"
    } ]

Для этого у меня есть этот маршрут:

Route :: get ('/ country', 'CountryController @ index');

И индекс метода:

public function index(Request $request)
{

    $query = Country::query();

    if ($request->has('fields')){         
        $fields = explode(',', $request->input('fields') );          
        foreach ($fields as $field) {
            $query->addSelect($field);
        }        
    }

    if ($request->has('sort')){
        $query->orderBy($request->input('sort'));
    }

    if ($request->has('desc')){
        $query->orderBy($request->input('desc'), 'desc');
    }

    $countries = $query->get();

    return response()->json($countries, 200);
}

Работает нормально.

У меня только вопрос: правильно ли я делаю вещи? Есть ли другие методы?

Большое спасибо за ваш отзыв. Merci

Дом

Ответы [ 3 ]

0 голосов
/ 30 июня 2018

Вы можете попробовать использовать это:

$countries = $query->pluck('id', 'country_name');

Пожалуйста, проверьте и дайте мне знать.

0 голосов
/ 30 июня 2018

Чтобы предотвратить неизвестное исключение столбца, попробуйте это:

  1. Схема импорта класса use Illuminate\Support\Facades\Schema;
  2. добавить это:

    $table = "countries";
    if ($request->has('fields')){
        $fields = explode(',', $request->input('fields') );
        foreach ($fields as $field) {
            if(!Schema::hasColumn($table,$field)){
                return response("Unknown field", 422);
            }
            $query->addSelect($field);
        }
    }
    
0 голосов
/ 30 июня 2018

То, что вы делаете со мной, не имеет уязвимости и также очень оптимизировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...