属于许多独立的儿童关系 - 拉拉维尔/雄辩



模型结构

FoodCategory-hasMany:Food

Food-归属ToMany:AccessoryGroup|归属To:FoodCategory

AccessoryGroup-hasMany:Accessory|belongsToMany:Food

Accessory-归属:AccessoryGroup

$foodCategories = FoodCategory
::with([
'foods',
'foods.accessory_groups',
'foods.accessory_groups.accessories',
])
->get();
$foodCategories->each(function($foodCategory) {
$foodCategoryId = $foodCategory->id;
$foodCategory->foods->each(function($food) use( $foodCategoryId ) {
$food->accessory_groups->each(function($accessoryGroup) use( $foodCategoryId ) {
$accessoryGroup->accessories->each(function($accessory) use( $foodCategoryId ) {
// accessory - not unique by different food grandparent realation
$accessory->parent_food_category_id = $foodCategoryId;
});
});
});
});

问题是当我将CCD_ 11设置为最后一个相同的附件覆盖CCD_;所有配件">(具有相同id(-(不同的food祖父母(

是否可以容易地";克隆";belongsToMany关系(在这种情况下为accessory_groups(。并且当您更改其子项(accessory(时,不更改所有相同的accessories(具有相同id(

需要优化的解决方案。不要为每个CCD_ 18->accessory_group关系(这个问题的解决方案之一(

我的解决方案(使用复制模型方法(

$foodCategories->each(function($foodCategory) {
$foodCategoryId = $foodCategory->id;
$foodCategory->foods->each(function($food) use( $foodCategoryId ) {
$food->accessory_groups->each(function($accessoryGroup) use( $foodCategoryId ) {
$accessoryGroup->accessories->each(function($accessory, $index) use( $foodCategoryId, $accessoryGroup ) {

// Create clone
$accessoryClone = $accessory->replicate();
$accessoryClone->parent_food_category_id = $foodCategoryId;

// OVERRIDE existing accessory with cloned
$accessoryGroup->accessories[$index] = $accessoryClone;
});
});
});
});

最新更新