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这样的产品也是正确的。用这种方式工作,这确实是一个好主意和解决方案,但我不想使用级联或隐式地做一些事情。我更喜欢明确地处理所有事情。