查询构建器 - Laravel中的绑定参数顺序

时间:2015-02-18 15:31:18

标签: mysql laravel laravel-4 query-builder laravel-5

我需要它来创建类似于此的查询(真正的查询要复杂得多):

SELECT * FROM person LEFT JOIN (SELECT * FROM invoice WHERE name='abc') AS i ON i.person_id = person.person_id ORDER BY person.custom_1 DESC

我创建了以下子查询:

$subQuery = \DB::table('invoice')->where('name','abc');

我当前person中有$model表,所以我做了类似的事情:

 $model = $model->join(\DB::raw('(' . $subQuery->toSql().') as i', 'i.person_id,'=','person.person_id');

现在我有以下问题。 $model是一个Person模型,但它可能已经与其他表连接,也可能已添加条件等。在上述查询之后,可能会应用更多条件或连接。

这里的问题是绑定。

我不能简单地运行

 $model = $model->join(\DB::raw('(' . $subQuery->toSql().') as i', 'i.person_id,'=','person.person_id')->addBinding($subQuery->getBindings());

因为这些绑定将在最后添加,但显然不会起作用(绑定将以错误的顺序分配)。

我也不能使用例如:

$model->setBindings(array_merge($subQuery->getBindings(), $model->getBindings()));

因为正如我之前提到的,我可能已经将$model加入了其他表格。此外,我不能简单地更改子查询(它确实非常复杂 - 在这里我只是为了显示问题而设置了非常简单的版本)。

问题 - 有没有办法从子查询中绑定参数以将它们绑定在正确的位置?

0 个答案:

没有答案