0

雄弁にサブクエリを実行する方法を考えていました。これが、実行したいサブクエリと、雄弁なモデル構造で使用しているデータベースを含む要点です。

//the query I want to execute
select p.title, c.total
from posts as p,
(select post_id as id, count(*) as total from comments group by post_id) as c
where p.id=c.id


//my table structures
table posts -
id title content

table comments -
id post_id content


//eloquent models
class Post extends Eloquent{
    public static $timestamps = false;

    public function comments(){
        return $this->has_many('Comment', 'post_id');
    }
}

class Comment extends Eloquent{
    public static $timestamps = false;

    public function post(){
        return $this->belongs_to('Post', 'post_id');
    }
}

基本的に、サブクエリを含むクエリを実行するためにeloquentを使用したいと思います。DB :: query();を使用できることはわかっています。生のクエリを実行するメソッド、または結合を使用してみることができますが、雄弁に固執したいと思います。どんな種類のアーキテクチャの提案も歓迎されます。なぜなら、まったく同じクエリを使用せずに、eloquentを使用して同じ結果を取得する方法を見逃している可能性があるからです。

前もって感謝します。

4

1 に答える 1

0

おそらくこれまでのところ、Eloquent にはサブクエリのサポートがありません。ただし、試すことができます:

  1. サブクエリを実行して結果を一時テーブルに入れ、そのテーブルを参照してメインクエリを実行します(一時テーブルを削除することを忘れないでください)
  2. サブクエリを使用する必要がない方法でクエリを書き直します (これは常に可能であるとは限りません)。

2 番目の選択肢では、クエリは次のようになります。

select p.title, count(c.id) as total
  from posts as p
  left join comments as c on p.id=c.id
group by p.id

これは同等で、通常は高速だと思います。

PS: テーブルがないため、クエリをテストしていませんが、このアプローチを頻繁に使用しています。タイプミスがある場合は、お知らせください。

于 2013-02-21T08:57:38.220 に答える