¿Cómo puedo hacer subconsulta en laravel elocuente?

Cuando uso db raw, funciona

Mi consulta está usando db raw así:

$products = DB::select(DB::raw('SELECT * 
                FROM (
                    SELECT a.*, b.name AS store_name, b.address
                    FROM products a
                    JOIN stores b ON b.id = a.store_id
                    WHERE a.category_id = '.$category_id.'
                    ORDER BY a.total_sold DESC, a.updated_at DESC
                    LIMIT '.$num.'
                ) AS product
                GROUP BY store_id'));

Funciona. Pero quiero cambiarlo, usar laravel elocuente

Intento así:

$products = Product::where('category_id', '=', $category_id)
     ->with('store')
     ->groupBy('store_id')
     ->orderBy('total_sold','desc')
     ->orderBy('updated_at', 'desc')
     ->take($num)
     ->get();

También funciona Pero orderBy updated_at no se ejecuta

¿Cómo puedo resolverlo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta