Как узнать, какие столбцы представлены в запросе Eloquent, прежде чем выполнять его в Laravel 5.5? - PullRequest
0 голосов
/ 01 мая 2020

Я использую Laravel 5.5, и у меня есть и объект QueryBuilder (из класса "Illuminate / Database / Eloquent / Builder").

Я хочу установить предложение orderBy в свой запрос, но только если это поле присутствует и существует в объекте QueryBuilder (как столбец в предложении select section).

Например, есть модель User со следующими полями ['id', 'firtsname', 'lastname', 'username', 'description'].

Это мой объект:

Use App\User;
$query = User::query();
if ($request->input('sort') != null) {
   $model_query->orderBy($request->input('sort'), 'ASC');
}
$users = $query->get();

Когда я его выполняю, работает нормально (если я, конечно, отправлю вам непротиворечивые данные). Но если я установлю столбец, чего не существует, то отправит и исключение. Итак, вопрос в том, как мне получить столбцы для извлечения из моего объекта $ query? Чтобы проверить его и, если он есть, выполните код заказа.

1 Ответ

1 голос
/ 01 мая 2020

Чтобы ответить на ваш вопрос, вы можете получить статус присутствия столбца, используя Schema::hasColumn()

if (Schema::hasColumn('users', $request->sort)) {
    //
}

GOING FURTHER

Теперь это не похоже очень эффективный, и, возможно, потенциально утечка данных. Лучше проверить ваш sort ввод и принять только правильные имена столбцов:

$request->validate(['sort' => 'in:column1,column2']);
...