我需要它来创建类似于此的查询(真正的查询要复杂得多):
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
加入了其他表格。此外,我不能简单地更改子查询(它确实非常复杂 - 在这里我只是为了显示问题而设置了非常简单的版本)。
问题 - 有没有办法从子查询中绑定参数以将它们绑定在正确的位置?