我想通过使用查询构建器使这个查询成为最可能的 Laravel 方式。 谢谢
SELECT DISTINCT ON (spaceid) * FROM (SELECT DISTINCT ON (galleryid) * FROM gallery_spaces ORDER BY galleryid, RANDOM()) AS intermediate ORDER BY spaceid, RANDOM() LIMIT 8
抱歉,这是我所能得到的最接近的,但它不一样
$diferentsGalleries = GallerySpace::select(DB::raw('DISTINCT ON(galleryid) *'))
->wherehas('gallery')
->orderByRaw('galleryid, RANDOM()')
->limit(30)
->pluck('id');
$featured_spaces = GallerySpace::select(DB::raw('DISTINCT ON(spaceid) *'))
->with('space')
->with('gallery')
->wherein('id',$diferentsGalleries)
->orderByRaw('spaceid, RANDOM()')
->limit(8)
->get();
答案 0 :(得分:0)
我终于想通了。
$featured_spaces = GallerySpace::select(DB::raw('DISTINCT ON (spaceid) *'))
->fromSub(function ($query) {
$query->from('gallery_spaces')
->select(DB::raw('DISTINCT ON (galleryid) *'))
->orderby('galleryid')
->inrandomorder();}, 'intermediate')
->orderby('spaceid')
->inrandomorder()
->limit(8)
->get();
答案 1 :(得分:-1)
Laravel 提供了很多方法,没有一个比其他方法更好,让您的查询最简单的方法是使用 db facade
$result=DB::select("SELECT DISTINCT ON (spaceid) * FROM (SELECT DISTINCT ON (galleryid) * FROM gallery_spaces ORDER BY galleryid, RANDOM()) AS intermediate ORDER BY spaceid, RANDOM() LIMIT 8");