2017-05-03 7 views
1

サブクエリを含む単一の投稿を返信しようとしています。私は生のクエリを使用してこれを達成することができます。Laravel未処理のクエリとモデルの関係を含む

このようにすると、ポストモデル関係にアクセスできなくなります。コメント。

私はモデルの関係を維持するためにこれを行うことができますEloquent方法の多くはありますか?

また、すべてのことについて私が進むことができるより良い方法はありますか?あなたはそれについてどのように行くのか聞いて欲しいです。

$post = DB::select(
     "SELECT post.*, 
     (SELECT COUNT(*) FROM posts_votes 
     WHERE type = 1 
     AND post_id = posts.id) 
     AS up_votes, 
     (SELECT COUNT(*) FROM posts_votes 
     WHERE type = 2 
     AND post_id = posts.id) 
     AS down_votes 
     FROM posts 
     INNER JOIN posts_votes ON posts.id = posts_votes.post_id 
     WHERE posts.id = ?", [$id])[0]; 
+0

使用 '記事::'とsetect'試してみてください - あなたはポストのような雄弁モデルで生使用することができます –

+1

>ここで、(関数($サブクエリ){}) '::生を( "sql query") - > with( "relation") –

答えて

1

この

Post::select('*') 
->addSelect(DB::raw(' 
    (select count(*) 
    from posts_votes 
    where type = 1 
    and post_id = posts.id) 
    as up_votes 
')) 
->addSelect(DB::raw(' 
    (select count(*) 
    from posts_votes 
    where type = 2 
    and post_id = posts.id) 
    as down_votes 
')) 
->whereIn('id', $ids) 
->get(); 
+0

これは私にとってはうまくいきました。 @DivyankMunjaparaがコメントしたように、私はクエリの最後に ' - > with( 'relation')を追加するだけでした。しかし、私はこの方法がより寛容であるように感じます。私が私の場合に変更しなければならなかったのは、 'whereIn()'から 'where'まで、私は1つの投稿を照会するだけでした。 – patskot

+0

Iveはあなたのために1つを持っています(別の質問を開くべきでしょうか?)。上の例を使って、 'posts_votes'カウントを' $ posts-> children() 'に適用するにはどうすればいいですか? – patskot

+1

@patskotあなたはすべての選択を子供に追加することができます。 $ posts-> children() - > select($ all) - > addSelect($ upvotesquery) -> addSelect($ downvotequery) - > get()を選択します。この場合、私はPostモデルにスコープを作成します。 scopeUpDownVotes()(例: –

関連する問題