Привет всем!
Возникли проблемы с join, подскажите, пожалуста.
Необходимо выбрать товары, отсортированные по рейтингу. Рейтинг высчитывается, исходя из отзывов к товару.
$query = Product::where('products.is_published', '=', 1)
->where('products.published_at', '<=', Carbon::now())
->with('category')
->leftJoin('products_reviews', 'products_reviews.product_id', '=', 'products.id')
->where(function($q) {
$q->where(function ($qu) {
$qu->where('products_reviews.is_published', '=', 1)
->where('products_reviews.rating', '!=', 0);
})->orWhere('products_reviews.id', '=', null);
})
->addSelect(\DB::raw('(SUM(products_reviews.rating) / COUNT(products_reviews.id)) as `rating`'))
->groupBy('products.id')
->query->orderBy('rating', 'DESC');
$products = $query->paginate($limit);
Отзывы могут быть не опубликованы, их учитывать не нужно. Также у отзыва может быть не выставлен рейтинг (тогда это обычный комментарий). Вроде все отлично, но вот если у товара есть неопубликованный отзыв, то этот товар не выбирается.
Подскажите, пожалуйста, в чем может быть проблема?