Проверьте, есть ли у связанной модели запись в другой связанной модели - PullRequest
0 голосов
/ 18 марта 2019

У меня есть следующие модели и есть отношение

Модель

User
Product
Orders
OrderProduct
ProductReviews

Отношения

User hasMany Orders
Orders hasMany OrderProdut
User hasMany ProductReview
Product hasMany ProductReview
ProductReview belongsTo User

Внутри страницы продукта перечислены все отзывы об этом продукте с информацией о пользователе, который сделал обзор. Я хочу проверить, совершил ли обзор в списке покупку рассматриваемого товара.

До сих пор я делал это с php-циклами и энергичной загрузкой. Есть ли лучший способ сделать это

$product = Product::with([
    'reviews'=>function($q) {
        $q->where('status', 1);
    },
    'reviews.user'
])->first();

if($product){
    $product->load(['reviews.user.orders.orderProducts' => function($q) use($product){
        $q->where('product_id',$product->id);
    }]);
}

foreach ($product->reviews as $review){
    $review->purchased_from_microless = false;
    foreach ($review->user->orders as $order) {
        if($order->orderProducts->count()){
            $review->purchased_from_microless = true;
            break;
        }
    }

}

1 Ответ

0 голосов
/ 18 марта 2019

Можно встроить запрос, чтобы проверить, был ли рассмотрен продукт, приобретенный:

$product = Product::with([
    'reviews' => function($q) {
        $q->where('status', 1);
    },
    'reviews.user.orders'
])->first();

$reviews = $product
    ->reviews
    ->map(function ($value, $key) {
        $wasPurchased = $review->user->orders->orderProduct()->where('product_id', $product->id)->count() > 0;

        $review['purchased_from_microless'] = $wasPurchased;

        return $review;
    })->all();

Где коллекция обзоров перебирается с проверкой, чтобы видеть, есть ли у заказов пользователя обзора продукт, у которого есть идентификатор рассматриваемого продукта.

Возврат true, если счет больше единицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...