Laravel 检查相关模型是否在另一个相关模型中有条目

Laravel 检查相关模型是否在另一个相关模型中有条目,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我有以下型号,并有联系 模型 User Product Orders OrderProduct ProductReviews 关系 User hasMany Orders Orders hasMany OrderProdut User hasMany ProductReview Product hasMany ProductReview ProductReview belongsTo User 在产品页面中,该产品的所有评论都列出了进行评论的用户详细信息。 我想检查列表中的review是否购

我有以下型号,并有联系

模型

User
Product
Orders
OrderProduct
ProductReviews
关系

User hasMany Orders
Orders hasMany OrderProdut
User hasMany ProductReview
Product hasMany ProductReview
ProductReview belongsTo User
在产品页面中,该产品的所有评论都列出了进行评论的用户详细信息。 我想检查列表中的review是否购买了已审核的产品

到目前为止,我已经通过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;
        }
    }

}

可以内联查询以检查是否购买了已审核的产品:

$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();
其中,reviews集合通过一个检查循环,以查看review的用户订单是否有一个具有相关产品id的产品


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

需要
->where()
子句在
$product->load
中执行什么操作。无论如何,只应基于关系加载产品
审查