Php 什么是分离深层关系(关系的关系)的最佳方式?

Php 什么是分离深层关系(关系的关系)的最佳方式?,php,laravel,Php,Laravel,我有一个产品,它有很多特点,有很多变种 产品 public function features() { return $this->belongsToMany(Feature::class, 'product_feature', 'product_id', 'feature_id'); } 特征 public function variants() { return $this->belongsToMany(Variant::class, 'feature_vari

我有一个产品,它有很多特点,有很多变种

产品

public function features()
{
    return $this->belongsToMany(Feature::class, 'product_feature', 'product_id', 'feature_id');
}
特征

public function variants()
{
    return $this->belongsToMany(Variant::class, 'feature_variant', 'feature_id', 'variant_id');
}
在这里,变体关系取决于特征关系。如果删除了功能关系,则相关的变体关系也应删除。最好的方法是什么

我试过这个

$product->features()->each(function($feature){
    $feature->variants()->each(function($variant){
       $variant->sync([]); // $variant()->sync([]) returns Function name must be a string in...
    });
});
但获取带有消息“调用未定义的方法App\Models\ProductFeatureVariant::sync()”的
BadMethodCallException


这里的正确方法是什么?

我认为最好的id是使用
级联
,它将自动成为您想要的

$table->foreign('feature')->引用('id')->on('variant')->onDelete('cascade');

在这篇文章中,你可以阅读更多关于
cascade
,我想你不需要循环变量,只要做
$feature->variants()->sync([])
$feature->variants()->detach()
之后,像
$product->features()->sync([])
@MKhalidJunaid这样的产品也是正确的。用这种方式工作,这确实是一个好主意和解决方案,但我不想使用级联或隐式地做一些事情。我更喜欢明确地处理所有事情。