DB::select
принимает второй параметр, как описано здесь , но Eloquent::select
– нет.
Вот мой запрос:
Feature::where('company_id', Auth::user()->company_id) ->select('id','name',DB::raw("exists(select * from vehicle_features vf where vf.vehicle_id=$id and vf.feature_id=feature.id) as `checked`")) ->orderBy('name')->get(),
Как я могу обеспечить, чтобы $id
был экранирован правильно?
Используйте DB::getPdo()->quote($id)
.
->select( 'id', 'name', DB::raw( "exists(select * from vehicle_features vf where vf.vehicle_id=" . DB::getPdo()->quote($id) . " and vf.feature_id=feature.id) as `checked`" ) )
Вы можете использовать PDO или проще вручную добавить привязку к Query:
Feature::select( 'id', 'name', // replace $id here DB::raw("exists(select * from vehicle_features vf where vf.vehicle_id=? and vf.feature_id=feature.id) as `checked`")) // and add this part ->addBinding($id) ->where('company_id', Auth::user()->company_id) ->orderBy('name')->get();
edit: как указано в комментариях ниже, привязки прослушиваются, и порядок методов имеет значение, поэтому приведенное выше будет работать так, как ожидалось.