我有以下模型并且存在关联
模型
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;
}
}
}
答案 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
。