我有3张桌子
1. 产品表
2. 条件表
3. condition_product表
现在我有一个产品属于3个条件。
我想获得属于这三种情况的所有相关产品。
我怎样才能实现这个目标?
product.php
public function conditions(){
return $this->belongsToMany(Condition::class)->withTimestamps();
}
condition.php
public function products(){
return $this->belongsToMany(Product::class)->withTimestamps();
}
这是我的代码:
public function productDetails(Product $product)
{
$a = $product->id;
$relatedProducts = Product::whereHas('conditions.products', function($q) use($a) {
$q->where('id', $a);
})
->get();
return view('pages/product', compact('product','relatedProducts'));
}
但我收到了错误。
答案 0 :(得分:1)
将whereHas()
方法与嵌套关系一起使用:
Product::whereHas('conditions.products', function($q) use($productId) {
$q->where('id', $productId);
})
->get();
这将为您提供具有指定产品条件的产品。
或者,你可以这样做:
$conditionIds = Product::find($productId)->conditions->pluck('id');
$products = Product::whereHas('conditions', function($q) use($conditionIds) {
$q->whereIn('id', $conditionIds);
})
->get();
答案 1 :(得分:0)
一个好的做法是始终指定'id'字段引用的女巫表,因为如果没有,它可以引用'conditions'表或'products'表'id'字段:
$relatedProducts = Product::whereHas('conditions.products', function($q) use($a) {
$q->where('products.id', $a);
})
->get();
您可以看到有关SQL不明确列名的answer。