如何使用Eloquent模型选择转义查询?

时间:2014-04-27 17:37:29

标签: php laravel eloquent

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正确转义?

2 个答案:

答案 0 :(得分:4)

使用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`"
    )
)

答案 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();

编辑:如下面的评论中所述,绑定被窃听并且方法顺序确实很重要,因此上述内容将按预期工作。