如果有ID,Laravel check有多个有多个关系?
您好,我有以下关系设置: 产品类别:如果有ID,Laravel check有多个有多个关系?,laravel,many-to-many,laravel-8,Laravel,Many To Many,Laravel 8,您好,我有以下关系设置: 产品类别: public function attributes() { return $this->hasMany(ProductAttribute::class); } public function values() { return $this->hasManyThrough(ProductAttributeValue::class, ProductAttribute::class);
public function attributes()
{
return $this->hasMany(ProductAttribute::class);
}
public function values()
{
return $this->hasManyThrough(ProductAttributeValue::class, ProductAttribute::class);
}
ProductAttribute类:
public function attribute()
{
return $this->belongsTo(Attribute::class);
}
public function values()
{
return $this->hasMany(ProductAttributeValue::class, 'product_attribute_id');
}
ProductAttributeValue类:
public function attributeValue()
{
return $this->belongsTo(AttributeValue::class, 'attribute_value_id');
}
如何检查产品
是否具有ID为5
和15
的值
我试图提出这样一个问题:
Product::whereHas('values', function($q) use ($product_values_ids) {
$q->whereIn('attribute_value_id', $product_values_ids);
})->get();
但是它不起作用。我无法直接访问$product->values
关于如何直接从产品
中访问属性值有何建议
更新:
我刚刚设法通过多对多的关系使其工作:
产品类别:
public function attributes()
{
return $this->hasMany(ProductAttribute::class);
}
public function values()
{
return $this->hasManyThrough(ProductAttributeValue::class, ProductAttribute::class);
}
有没有办法只获得所有ID都列在
$product\u values\u id
数组中的结果?您必须向产品模型添加新的关系:
public function values(): HasManyThrough
{
return $this->hasManyThrough(ProductAttributeValue::class, ProductAttribute::class);
}
然后:
$builder = Product::query();
foreach($product_values_ids as $id) {
$builder->whereHas('values', function($q) use ($id) {
$q->where('id', $id);
});
}
$product = $builder->get();
您正在检查是否存在任何具有这些ID值的产品,或者您希望这些记录与该条件匹配?产品没有
值关系
我想从$Product\u values\u id
数组中获取所有具有值的产品。是否尝试了嵌套的whereHas
产品::whereHas('attributes.values',…)->get()代码>?谢谢,我刚刚设法做到了这一点。现在还有一个问题,这个$q->其中('attribute\u value\u id',$product\u values\u id')代码>我正在获得结果,如果他们拥有所有$product\u values\u id
,我如何才能获得结果?例如,如果product_values_id为[3、12、20],则只返回包含所有三个id的结果,如果product的id为3和12的值被忽略,则不必使用,其中。我建议替换$q->其中('attribute\u value\u id',$product\u values\u id')代码>带循环和whereHas
和`$q->where('id',$id);。仅当所有条件都有效时,它才会返回值,但当我执行$results=$results->whereHas('values',function($q)使用($product_values_id){foreach($product_values_id作为$id){$q->where('attribute_value_id',$id);})代码>我没有得到基于两个valuesTry的结果来澄清。产品有3个属性,每个属性有3个值。我们需要的产品标识:[1,2]
。第一个变量:一个属性的值为1,第二个为2,第三个为3。产品有1,2,3,适合我们使用。第二个变量:一个属性的值为[1,2],第二个为3,第三个为4。产品有1,2,3,4,attribyte有[1,2],适合我们。哪种变体是正确的?为了澄清这一点,我们的目标是“过滤”所有具有$product\u values\u id
提供的所有值的产品。如果产品只有一个提供的值,则不应获取该产品。如果产品具有所有阵列ID,则应获取该产品。刚刚试用了第二个和第三个变体,如果只有一个数组id,它工作得很好,但是当提供的id超过1个时,在$product\u values\u id
中它不会返回任何内容。