Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在不覆盖现有数据的情况下向trailData添加愿望列表数据?_Php_Laravel_Api_E Commerce_Lumen - Fatal编程技术网

Php 如何在不覆盖现有数据的情况下向trailData添加愿望列表数据?

Php 如何在不覆盖现有数据的情况下向trailData添加愿望列表数据?,php,laravel,api,e-commerce,lumen,Php,Laravel,Api,E Commerce,Lumen,我是PHP新手,我正在为wishlist构建API,面向来宾用户和Laravel Lumen中的登录用户。这里我使用TrailManagerService作为会话管理器 它将数据保存为 - for logged in users Array ( [trail_id] => 4b19bd9d-f2da-431b-8aba-d181d7eca736 [inception_time] => 1599813465 [last_used] => 1600762156 [custom

我是PHP新手,我正在为wishlist构建API,面向来宾用户和Laravel Lumen中的登录用户。这里我使用TrailManagerService作为会话管理器 它将数据保存为

- for logged in users
   Array
(
[trail_id] => 4b19bd9d-f2da-431b-8aba-d181d7eca736
[inception_time] => 1599813465
[last_used] => 1600762156
[customer_id] => 106210
[customer_data.customer_id] => 106210
[customer_data.firstname] => XXXX
[customer_data.lastname] => YYYY
[customer_data.gender] => Male
[customer_data.dob] => 1999-10-19
[customer_data.email] => xx@yy.com
[customer_data.mobile] => 2245436547
[customer_data.referral_code] => HRI11489

-for guest users
 Array
(
[trail_id] => 8b7e6931-6ad3-48a0-af61-4caaab85cf20
[inception_time] => 1600761357
[last_used] => 1600761391
我想在trailData中添加愿望列表项,并在用户登录时将其保存到DB,然后在保存到DB后清空RailData。此外,如果用户未登录,则应将当前会话的愿望列表数据保存在trailData中

WishlistControllerService代码

   <?php

    namespace App\Http\Services\v1\Products;
    
    use App\Http\Controllers\Controller;
    use Illuminate\Support\Facades\Redis;
    use Illuminate\Http\Request;
    use App\Services\SOA\TrailManagerService;
    use App\Repositories\WishlistRepository;
    
    class WishlistControllerService
    {
        public function __construct(WishlistRepository $wishlistRepository)
        {
            $this->wishlistRepository = $wishlistRepository;
        }
    
        public function showList(Request $request){
            $trailData = TrailManagerService::getAllTrailData('customer_id');
            $trailCustomerId = TrailManagerService::getTrailData('customer_id');
            $headerCustomerId = (int) $request->header('X-Customer-ID', 0);
    
            $responseData = [];
            $trailCustomerId = $trailData['customer_id'] ?? 0;
            print_r($trailData);exit;
            if($trailCustomerId === $headerCustomerId) {
                // print_r("hi");exit;
    
                $wishlistData = $this->wishlistRepository->getWishlist($trailCustomerId);
    
                $responseData = [
                    'identifier' => 'wishlist',
                    'data' => [ 
                        'list' => $wishlistData
                    ]
                ];
            } else if($trailCustomerId === 0) {
                // print_r("bye");exit;
                // $tempWishlistItem = [
                //  // 'guestUserID'        => $, 
                //  'productID'         => $request->input('product_id'), 
                //  'sizeID'            => $trailData['size_id'],
                //  'productQuantity'   => $request->input('quantity'), 
                //  'shippingPin'       => $request->input('postal_code'), 
                //  'shippingCity'      => $request->input('city_name'), 
                // ];
    
                $responseData = [
                    'identifier' => '',
                    'data' => [ 
                        'list' => []
                    ]
                ];
            } else {
                // print_r("why");exit;
                $responseData = [
                    'status' => 403,
                    'message' => 'Access Forbidden'
                ];
            }
    
            return $responseData;
        }
    public function store($request, $productId){
        $trailData = TrailManagerService::getAllTrailData();
        $responseData = [];
        $headerCustomerId = (int) $request->header('X-Customer-ID', 0);

        $trailCustomerId = $trailData['customer_id'] ?? 0;

        $tempWishlistItem =
            [   
                // 'siteUserID`'        => $customerId ?? $trailCustomerId,
                'productID'         => $productId, 
                'sizeID'            => $request->input('size_id'),
                'productQuantity'   => $request->input('quantity'), 
                'currency'          => strtoupper($request->input('currencyCode')), 
            ];
        $tempData[] =
        array_push($trailData, $tempWishlistItem);
        
        TrailManagerService::setTrailData($trailData);
            
        print_r($trailData);exit;


        // if($trailCustomerId === $customerId) {


            $wId = $this->wishlistRepository->create($wishlistModelData);
                    $responseData = ['data' => ['userWID' => $wId]]; 
            $wishlistModelData = [
                'siteUserID'        => $customerId, 
                'productID'         => $productId, 
                'sizeID'            => $request->input('size_id'),
                'productQuantity'   => $request->input('quantity'), 
                'currency'          => strtoupper($request->input('currencyCode')), 
            ];
            // print_r($wishlistModelData);exit;

            $wishlistItem = $this->wishlistRepository
                ->findWhere(['status' => 1, 'siteUserID' => $customerId, 'productID' => 
    $productId]);
            if(empty($wishlistItem[0]) === false) {
                $responseData = [   
                    'status' => 403,
                    'message' => 'Forbidden, Item already in Wishlist'
                ];

            } else {
                $wId = $this->wishlistRepository->create($wishlistModelData);
                    $responseData = ['data' => ['userWID' => $wId]];    
            }
            
        } else {
            // $tempWishlistData = [];
            $tempWishlistItem =
                [   
                    // 'siteUserID'     => $customerId ?? $trailCustomerId,
                    'productID'         => $productId, 
                    'sizeID'            => $request->input('size_id'),
                    'productQuantity'   => $request->input('quantity'), 
                    'currency'          => strtoupper($request->input('currencyCode')), 
                ];
            
                    $tempWishlistData = array_merge($trailData, [$tempWishlistItem]);
                    print_r($tempWishlistData);exit;
                    $trailDataTemp = TrailManagerService::setTrailData(

                    $tempWishlistData   
                );
                print_r($trailDataTemp);exit;
                
            if($customerId === $trailData['customerID']){
                
                foreach($tempWishlistData as $item) {
                    $wId = $this->wishlistRepository->create($wishlistModelData);
                    $responseData = ['data' => ['userWID' => $wId]];    
                }

                TrailManagerService::emptyTrailData();
            }

    
        
        return $responseData;
    }



    <?php
    
    namespace App\Http\Controllers\v1\Products;
    
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use App\Http\Services\v1\Products\WishlistControllerService;
    use Validator;
    use App\Helpers\Utilities;
    use App\Services\SOA\TrailManagerService;
    use Illuminate\Support\Facades\Route;
    
    
    class WishlistController extends Controller
    {
        private $controllerService;
    
        public function __construct(WishlistControllerService $controllerService)
        {
            // $request = app(Request::class);
            // $customerId = $request->header('X-Customer-ID', 0);
            // TrailManagerService::authorize($customerId);
            
            $this->controllerService = $controllerService;
    
        }
    
        public function index(Request $request)
        {
            $responseData = $this->controllerService->showList($request);
            
            $httpStatus = $responseData['status'] ?? 200;
    
            return $this->response($responseData, $httpStatus);
        }
        
    
        public function store(Request $request, int $productId){
            $requestParams = $request->all();
            // $requestParams['productId'] = $request->header('product_id');
            
            $validator = Validator::make($requestParams,
                [
                    'product_id'    => 'integer',
                    'size_id'       => 'integer',
                    'quantity'      => 'required|integer|digits_between:1,2',
                    'currencyCode'  => 'required|string|in:INR,EUR,USD,AUD,CAD,SGD,HKD'
                ],
                [
                    'product_id.integer'=> 'Parameter product_id is mandatory',
                    'size_id.integer'   => 'Invalid value for parameter size_id',
                ],
            );
    
            if ($validator->fails()) {
                $messages = $validator->errors();
                $responseData = Utilities::requestValiationResponse($messages);
            } else {
                // print_r($productId);exit;
                $responseData = $this->controllerService->store($request, $productId);
            }
            
            $httpStatus = $responseData['status'] ?? 200;
    
            return $this->response($responseData, $httpStatus);
        }
    
        public function remove(Request $request, int $productId)
        {
            $responseData = $this->controllerService->remove($request, $productId);
            
            $httpStatus = $responseData['status'] ?? 200;
    
            return $this->response($responseData, $httpStatus);
        }
    
    }


    <?php
    
    namespace App\Repositories;
    
    use Prettus\Repository\Eloquent\BaseRepository;
    use App\Models\MxUserWishlist;
    use Illuminate\Support\Facades\DB;
    use App\Helpers\Utilities;
    
    class WishlistRepository extends BaseRepository
    {
        /**
         * Specify Model class name
         *
         * @return string
         */
        public function model()
        {
            return MxUserWishlist::class;
        }
    
        /**
         * @param  int  $customerId
         * @return array
         */
        public function getWishlist($trailCustomerId): array
        {
            $wishlistData = [];
            
            $query = "SELECT W.userWID, W.siteUserID, W.productID,P.productTitle, PSI.imageName, 
                W.sizeID, S.sizeTitle, D.designerName,P.designerID, P.categoryID, 
                PS.productPrice, PS.discountPercent,PS.filterPrice,P.seoUri
                FROM  mx_user_wishlist W
                INNER JOIN mx_product P ON P.productID = W.productID 
                INNER JOIN mx_product_set PS ON (W.productID = PS.productID AND W.sizeID = PS.sizeID)
                INNER JOIN mx_product_set_images PSI ON PSI.productID = W.productID
                INNER JOIN mx_size S ON S.sizeID = W.sizeID  
                INNER JOIN mx_designer D ON P.designerID = D.designerID
                WHERE W.siteUserID = $trailCustomerId";
        
            $wishlistCollection = DB::select($query, ['siteUserID' => $trailCustomerId]);
            
            if(empty($wishlistCollection) === false) {
                foreach ($wishlistCollection as $key => $wishlist) { 
                    $productId = 0;
                    $productUrl = '';
                    $productUrl = '/products/'.$wishlist->seoUri.'/'.$wishlist->productID;
    
                    $wishlistItems = [
                        'id'                    => $wishlist->productID,
                        'name'                  => $wishlist->productTitle,
                        'image'                 => config('global.cdni_url').'/tr:w-317/uploads/product/'.$wishlist->imageName,
                        'product_url'           => $productUrl,
                        'sizes'                 => [
                                                    'id' => $wishlist->productID,
                                                    'name' => $wishlist->sizeTitle
                                                    ],
                        'designer_name'         => $wishlist->designerName,                
                        'category_id'           => $wishlist->categoryID,                
                        'mrp'                   => $wishlist->productPrice,
                        'discount_percentage'   => $wishlist->discountPercent,
                        'you_pay'               => $wishlist->filterPrice,
                    ];  
                }   
                return $wishlistItems;
            } else {
                $responseData = [];
                return $responseData;
            }
            // return $responseData;
        }