DB::select
将第二个参数设为described here,但Eloquent::select
不会。{/ p>
这是我的疑问:
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
正确转义?
答案 0 :(得分:4)
->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`"
)
)
答案 1 :(得分:0)
您可以使用PDO或更轻松地手动添加绑定到查询:
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();
编辑:如下面的评论中所述,绑定被窃听并且方法顺序确实很重要,因此上述内容将按预期工作。