я думаю, вам следует добраться до таблицы user_promotions с помощью leftJoin, а затем выбрать максимальную скидку:
$promotions = User::whereHas('products')
->with(['userProduct.product','userProduct.promotion'])
->leftJoin('user_products','user_products.user_id','users.id')
>leftjoin('user_promotions','user_promotions.user_product_id','user_products.id')
->select('users.*',DB::raw('MAX(discount)'))->take(10)->get();
будьте осторожны с именами таблиц, они должны точно соответствовать вашим таблицам в вашей базе данных