Laravel的子查询from方法

10 浏览
0 Comments

Laravel的子查询from方法

如何在laravel中使用内部查询。请注意,我的问题与这个问题不同。\n我有一个通用的方法,返回常规和复杂的内部查询。通过阅读laravel的源代码,我发现了一个临时解决方法\n

$query->whereIn('column', function ($query) { /*noop*/ });
$innerQuery = Model::myComplexInnerQueryMethod()->getQuery();
$query->getQuery()->wheres[0]['query'] = $innerQuery;
$query->mergeBindings($innerQuery);

\n但这很丑陋(至少可以这么说)\n有什么想法吗?\nmartin的答案更新\n

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