2014-09-16 5 views
0

Как я могу сделать этот запрос в Laravel, используя Eloquent ORM?запрос с Laravel Eloquent ORM

select * from posts p order by (select count(*) from likes where flag = 'c' and p.id = post_id) Desc limit 3 

У меня есть эти отношения в моей модели

Post.php

public function likes(){ 
    return $this->hasMany('Like', 'post_id'); 
} 

Like.php

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

Спасибо! :)

+0

SELECT COUNT (*) от подобных, где флаг = 'с' и p.id = post_id - будет возвращать номер. Вам действительно нужно что-то вроде select * from posts p order by (9999) Desc limit 3 Вам нужно coulmn или выражение – user3657823

ответ

0

Вы можете попробовать что-то вроде этого:

$posts = Post::leftJoin('likes', function($join) { 
     $join->on('posts.id', '=', 'likes.post_id')->where('flag', '=', 'c'); 
    }) 
    ->select('posts.*', 'likes.post_id', DB::raw('count(likes.post_id) as pCount')) 
    ->groupBy('post_id') 
    ->orderBy('pCount', 'desc') 
    ->take(3) 
    ->get(); 
+0

Вы бы предпочли ** не ** выбрать 'любит. *' Здесь (вероятно, избыточно, наверняка переопределяя 'posts.id' в результате), а' leftJoin' будет более точным. –

+0

Вы правы, обновили его благодаря @JarekTkaczyk, я должен признать, что у вас есть глаза орла :-) –

+0

У меня получилась эта ошибка: SQLSTATE [42703]: Неопределенный столбец: 7 ОШИБКА: column "likes.post_id" не есть LINE 1: ... posts ". *," likes "." post_id ", count (" нравится ....^(SQL: выберите "posts". *, "нравится". "post_id", count (" likes.post_id ") как pCount из" posts "left join" нравится "на" сообщениях "." id "=" нравится "." post_id "и" flag "= c group by" post_id "order by" pCount "desc limit 3). Но у меня этот столбец понравился.post_id в моей БД –

Смежные вопросы