假设我的项目包含Post
个,其中有Vote
个。{/ p>
如何获得票数最高的10 Post
个?
答案 0 :(得分:2)
你不能在Eloquent的一个不错的查询中做到这一点(AFAIK)。您可以直接使用表名直接使用DB :: select(),也可以按计数加入和排序。
但是,如果您不介意一些开销和PHP处理,您可以执行以下操作:
$posts = Post::with('Vote')->all()->sortBy(function ($item) {
return $item->votes->count();
}, SORT_REGULAR, true)->take(10);
答案 1 :(得分:0)
您需要在select上使用DB :: raw进行一些手动数据库查询。
$modela = new ModelA;
$modelb = new ModelB;
$tablea = $modela->getTable();
$tableb = $modelb->getTable();
$query = $modela->query();
$query->select(DB::raw("(SELECT COUNT(*) FROM {$tableb} as b where b.a_id = {$tablea}.id) AS b_count"));
未经测试但查询应该是正确的。您需要将WHERE b.a_id更新为相关的字段名称。