检查相关模型是否在另一个相关模型中输入

时间:2019-03-18 10:58:08

标签: laravel laravel-5 eloquent

我有以下模型并且存在关联

模型

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 :(得分:0)

可以内联查询来检查是否购买了评论产品:

$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();

在这里,通过检查来循环查看评论集合,以查看评论用户的订单中是否有带有该产品ID的产品。

如果计数大于1,则返回true