Simón Farias
Simón Farias

Reputation: 772

How to know what columns are presents in a Eloquent query before to execute it in Laravel 5.5?

Im using Laravel 5.5 and I have and QueryBuilder object (from the "Illuminate/Database/Eloquent/Builder" class).

I want to set an orderBy sentence into my query, but only if this field is present and exists in the QueryBuilder object (as column in the select section sentence).

For example, there is an User model, with the following fields ['id', 'firtsname', 'lastname', 'username','description'].

This is my object:

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

When I execute it, works fine (if I send you consistent data, of course). But if I set a column what does not exists, it sends and exception. So, the question is, how I can get the columns to retrieve from my $query object? To validate it, and if it's presents, execute the ordening code.

Upvotes: 1

Views: 141

Answers (1)

Christophe Hubert
Christophe Hubert

Reputation: 2951

To answer your question, you can get the presence status of a column using Schema::hasColumn()

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

GOING FURTHER

Now this doesn't seem very efficient, and maybe potentially leak data. Better validating your sort input and accept only proper column names:

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

Upvotes: 1

Related Questions