CopyGoodsService.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 2017/5/3
  6. * Time: 上午11:52
  7. */
  8. namespace app\backend\modules\goods\services;
  9. use app\backend\modules\goods\models\GoodsOption;
  10. use app\backend\modules\goods\models\GoodsSpec;
  11. use app\backend\modules\goods\models\GoodsSpecItem;
  12. use app\common\models\Goods;
  13. class CopyGoodsService
  14. {
  15. public static function copyGoods($goods_id)
  16. {
  17. $goodsModel = Goods::uniacid()->find($goods_id);
  18. if (!$goodsModel) {
  19. return false;
  20. //$this->error('商品不存在.');
  21. }
  22. $newGoods = $goodsModel->replicate();
  23. $newGoods->save();
  24. $goodsModel->load('hasOneShare', 'hasManyDiscount','hasOneSale', 'hasOneGoodsDispatch', 'hasOnePrivilege');
  25. foreach($goodsModel->getRelations() as $relation => $item){
  26. if ($item) {
  27. if ($relation == 'hasManyDiscount') {
  28. foreach ($item as $val) {
  29. unset($val->id);
  30. $newGoods->{$relation}()->create($val->toArray());
  31. }
  32. continue;
  33. }
  34. unset($item->id);
  35. $newGoods->{$relation}()->create($item->toArray());
  36. }
  37. }
  38. $goodsModel->setRelations([]);
  39. $goodsModel->load('hasManyParams', 'hasManyOptions');
  40. foreach($goodsModel->getRelations() as $relation => $items){
  41. foreach($items as $item){
  42. if ($item) {
  43. unset($item->id);
  44. $newGoods->{$relation}()->create($item->toArray());
  45. }
  46. }
  47. }
  48. $goodsModel->setRelations([]);
  49. $goodsModel->load('hasManyGoodsCategory');
  50. foreach($goodsModel->getRelations() as $relation => $items){
  51. foreach($items as $item){
  52. if ($item) {
  53. unset($item->id);
  54. $item->goods_id = $newGoods->id;
  55. $newGoods->{$relation}()->create($item->toArray());
  56. }
  57. }
  58. }
  59. //todo, 先复制老的规格,再复制规格项,再更新规格content字段,最后复制option,更新option specs字段
  60. $goodsSpecs = GoodsSpec::uniacid()->where('goods_id', $goodsModel->id)->get();
  61. $specItemIds = [];
  62. $item_ids = [];
  63. foreach($goodsSpecs as $goodsSpec){
  64. $newGoodsSpecModel = $goodsSpec->replicate();
  65. $newGoodsSpecModel->goods_id = $newGoods->id;
  66. //dd($newGoodsSpecModel);
  67. $newGoodsSpecModel->save();
  68. //获取旧的规格项
  69. $goodsSpecItems = GoodsSpecItem::uniacid()->where("specid", $goodsSpec->id)->get();
  70. foreach($goodsSpecItems as $goodsSpecItem){
  71. $newGoodsSpecItem = $goodsSpecItem->replicate();
  72. $newGoodsSpecItem->specid = $newGoodsSpecModel->id;
  73. $newGoodsSpecItem->save();
  74. $items = [
  75. 'old_item' => $goodsSpecItem->id,
  76. 'new_item' => $newGoodsSpecItem->id,
  77. ];
  78. array_push($item_ids, $items);
  79. array_push($specItemIds, $newGoodsSpecItem->id);
  80. }
  81. $newGoodsSpecModel->content = serialize($specItemIds);
  82. $newGoodsSpecModel->save();
  83. }
  84. $goodsOptions = GoodsOption::uniacid()->where('goods_id', $newGoods->id)->get();
  85. foreach($goodsOptions as $goodsOption){
  86. $specs = explode("_", $goodsOption->specs);
  87. $newSpecs = [];
  88. foreach($specs as $spec){
  89. foreach($item_ids as $item){
  90. if ($item['old_item'] == $spec){
  91. $newSpecs[] = $item['new_item'];
  92. }
  93. }
  94. }
  95. $goodsOption->specs = implode("_", $newSpecs);
  96. $goodsOption->save();
  97. }
  98. return $newGoods;
  99. }
  100. }