如何在laravel中执行内部查询。请注意我的问题不是this question。
我有一个常见的方法,它返回常见和复杂的内部查询。有了它,我发现了一个脏修复阅读laravel的源代码
$query->whereIn('column', function ($query) { /*noop*/ });
$innerQuery = Model::myComplexInnerQueryMethod()->getQuery();
$query->getQuery()->wheres[0]['query'] = $innerQuery;
$query->mergeBindings($innerQuery);
但这很难看(至少可以说) 有什么想法吗?
更新马丁的回答class MyModel extends \Eloquent {
// @return \Illuminate\Database\Query\Builder
static function myComplexInnerQueryMethod($index) {
return static::query()->join(…)->join(…)->where(…)->where(…)->etc();
}
}
class Analytics extends MyModel {
function scopeIndex($query, $index) {
$query->whereIn('column', function ($query) { /*noop*/ });
$innerQuery = self::myComplexInnerQueryMethod($index)->getQuery();
$query->getQuery()->wheres[0]['query'] = $innerQuery;
$query->mergeBindings($innerQuery);
return $query;
}
}