模型结构:
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;
});
});
});
});