Laravel从派生表中选择

Laravel从派生表中选择,laravel,eloquent,Laravel,Eloquent,有没有办法将这个查询转换成Laravel雄辩的格式 SELECT TEMP.A, COUNT(*) AS Total FROM (SELECT A FROM TABLE WHERE B='something' GROUP BY C) AS TEMP GROUP BY TEMP.A 这里我要做的是,根据特定where子句中C的不同记录,得到A的计数 subselect语句也是一个有说服力的对象,它是由用户在过滤器上的输入建立起来的,用于获取C out的不同记录。 我尝试这样做,假

有没有办法将这个查询转换成Laravel雄辩的格式

SELECT TEMP.A, COUNT(*) AS Total FROM 
      (SELECT A FROM TABLE WHERE B='something' GROUP BY C) 
AS TEMP GROUP BY TEMP.A
这里我要做的是,根据特定where子句中C的不同记录,得到A的计数

subselect语句也是一个有说服力的对象,它是由用户在过滤器上的输入建立起来的,用于获取C out的不同记录。 我尝试这样做,假设子选择的雄辩对象是$query

$query2->DB::connection()->table(function($_query) use ($query){
  $_query = $query;
  $_query->addSelect('A')->where('B','=','something')->groupBy('C')->get();
})->addSelect('A')->addSelect(DB::raw('COUNT(*) as Total'))->groupBy('A')->get(); 
但它似乎不起作用,有人建议在->table()中使用DB::raw,但问题是subselect语句实际上也是一个动态构建的雄辩语句


非常感谢您提前提供的帮助

子查询不能很好地与Elounting配合使用。你胆敢这么做只会让你自己头疼。我建议使用DB:select(),然后将hydrome()添加到您的模型中,并使用它将其转换为Eloquent。这就是我处理复杂查询的方式:

包含查询的文件:

<?php
    $query = "SELECT TEMP.A, COUNT(*) AS Total FROM (SELECT A FROM TABLE WHERE B='?' GROUP BY C) AS TEMP GROUP BY TEMP.A";
    $thing_query = DB::select($query, ['something']);
    $thing = Thing::hydrate($thing_query);
    // hydrate converted it into Eloquent so we can use things like first()
    return $thing->first()->total;
没有必要强制使用“雄辩的方式”进行更复杂的SQL查询,除非您绝对需要不依赖数据库。如果不需要的话,不要使代码过于复杂。使用绑定运行一个普通的、原始的查询,或者根据需要混合和匹配一些有说服力的和一些原始的查询。
<?php
class Thing extends Eloquent {
    /**
     * Hydrate method
     * 
     * @param array $data
     * @return Illuminate\Database\Eloquent\Collection
     */
    static public function hydrate(array $data, $connection = NULL)
    {
        // get calling class so we can hydrate using that type
        $klass = get_called_class();

        // psuedo hydrate
        $collection = new Illuminate\Database\Eloquent\Collection();
        foreach ($data as $raw_obj)
        {
            $model = new $klass;
            $model = $model->newFromBuilder($raw_obj);
            if (!is_null($connection))
                $model = $model->setConnection($connection);
            $collection->add($model);
        }
        return $collection;

    }
}