Laravel-在联接上使用DB :: raw()时绑定参数

时间:2019-05-02 08:25:09

标签: laravel eloquent

我有一个查询,要求使用DB::raw()进行联接。它加入了JSON_TABLE(),因此与人们通常所做的有所不同。我已经可以正常工作了,但是绑定参数时似乎无法正常工作。

代码如下:

if(!isset($request->search['merchantId']) && isset($request->search['uuid']['division'])) {

  $query->join(DB::raw('JSON_TABLE(
                      \'[{"division":"'.$request->search['uuid']['division'].'"}]\',
                      \'$[*]\' COLUMNS (
                              division VARCHAR(32) PATH \'$.division\'
                          )
                      ) jt1'), 'jt1.division', 'entitiesConsolidation.division');
}

2 个答案:

答案 0 :(得分:0)

您可以通过[ key => value]setBindings方法使用laravel绑定

$query->join(DB::raw('JSON_TABLE(
                  \'[{"division":":division"}]\',
                  \'$[*]\' COLUMNS (
                          division VARCHAR(32) PATH \'$.division\'
                      )
                  ) jt1', ['division' => $request->search['uuid']['division']]), 'jt1.division', 'entitiesConsolidation.division');

答案 1 :(得分:0)

使用json_array()json_object()构建JSON值,并使用addBinding()

if(!isset($request->search['merchantId']) && isset($request->search['uuid']['division'])) {
    $query->join(DB::raw('JSON_TABLE(
              json_array(json_object(\'division\', ?)),
              \'$[*]\' COLUMNS (
                      division VARCHAR(32) PATH \'$.division\'
                  )
              ) jt1'), 'jt1.division', 'entitiesConsolidation.division');

    $query->addBinding($request->search['uuid']['division'], 'join');
}