Laravel的方法子查询

时间:2017-06-29 13:13:06

标签: php laravel-4 eloquent

如何在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;
    }
}

0 个答案:

没有答案