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或更容易地手动向查询添加绑定:
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:正如下面的评论中所说,绑定被窃听了,方法的顺序很重要,所以上面的操作将按预期进行。