Неправильная детализация массива в laravel

Я хочу получить условия моего продукта в виде массива, чтобы добавить их в корзину, это dd моего продукта, когда я пытаюсь добавить его в свою корзину:

array:6 [▼
  "id" => 4
  "name" => "product four"
  "price" => null
  "quantity" => "1"
  "attributes" => array:1 [▼
    "attr" => array:2 [▼
      "name" => "weight"
      "value" => "45"
    ]
  ]
  "conditions" => array:2 [▼
    0 => CartCondition {#685 ▼ // need to add this
      -args: array:4 [▼
        "name" => "Black"
        "value" => "10000"
        "type" => "additional"
        "target" => "item"
      ]
      -parsedRawValue: null
    }
    1 => CartCondition {#692 ▼ // need to add this
      -args: array:4 [▼
        "name" => "12 inch"
        "value" => "25000"
        "type" => "additional"
        "target" => "item"
      ]
      -parsedRawValue: null
    }
  ]
]

Как вы видите, в отличие от моего attributes, мой conditions не отображается просто как массив, а получает значения в -args: и -parsedRawValue: null

Когда я пытаюсь добавить товар в корзину, я получаю эту ошибку:

Darryldecode \ Cart \ Exceptions \ InvalidItemException
validation.required

Ошибка

Это моя функция (как я получаю свои conditions и где я их использую:

public function addingItem(Request $request, $id)
{
      //finding product
      $product = Product::findOrFail($id);
      //get product weight
      $weight = $product->weight;
      //list of discounts
      $discounts = Discount::all();
      //get current time
      $mytime = Carbon::now();

      // get product weight in cart as attribute
      $weightArray = [
        'attr' => [
              'name' => 'weight',
              'value' => $weight,
        ]
      ];


      $customAttributes = [];  // my conditions comes from here
      if(!empty($request->attr)){
          foreach($request->attr as $sub) {
          // find the suboption
              $sub = Suboption::find($sub);
              if (!empty($sub->id)) {
                  $itemCondition1 = new \Darryldecode\Cart\CartCondition(array(
                      'name' => $sub->title,
                      'value' => $sub->price,
                      'type' => 'additional',
                      'target' => 'item',
                  ));

                  array_push($customAttributes, $itemCondition1);
              }
          }
      }

      //adding product, options and conditions to cart
      Cart::add(array(
        'id' => $product->id,
        'name' => $product->title,
        'price' => $request->input('harga'),
        'quantity' => $request->input('quantity'),
        'attributes' => $weightArray,
        'conditions' => $customAttributes,  // added here
      ));
      Session::flash('success', 'This product added to your cart successfully.');
      return redirect()->back();
}

Любая идея, почему я получаю эту ошибку и как ее исправить?


person mafortis    schedule 19.02.2018    source источник
comment
вы добавляете объект CartCondition. Вы хотите добавить массив или объект CartCondition?   -  person usrNotFound    schedule 19.02.2018
comment
@usrNotFound да, это должен быть массив, если их больше 1.   -  person mafortis    schedule 19.02.2018
comment
@usrNotFound образец кода моего пакета документов // or add multiple conditions as array Cart::condition([$condition1, $condition2]);   -  person mafortis    schedule 19.02.2018
comment
Да, я понимаю, что у вас есть необходимое условие, но не следует ли вам просто добавить массив, а затем объект CartCondition, если вы хотите, чтобы он был массивом?   -  person usrNotFound    schedule 19.02.2018
comment
@usrNotFound should you not just add array then CartCondition object в какой части? PS: (if i didn't misunderstood your point) все, что касается моего условия, связано с двумя причинами: 1- некоторые продукты могут не иметь никаких условий для выбора пользователем 2- пользователь не может выбрать какое-либо условие для добавления своего заказа.   -  person mafortis    schedule 19.02.2018
comment
измените этот $itemCondition1 = new\Darryldecode\Cart\CartCondition(array('name' => $sub->title, 'value' => $sub->price,'type' => 'additional')), чтобы просто добавить массив itemCondition1 = ['name' => $sub->title, 'value' => $sub->price,'type' => 'additional'] и что такое CartCondition?   -  person usrNotFound    schedule 19.02.2018
comment
CartCondition если фасад моего пакета не знаю почему, но во всех примерах они его использовали. вот github.com/darryldecode/laravelshoppingcart/#conditions   -  person mafortis    schedule 19.02.2018
comment
@usrNotFound даже с [] и удалением CartCondition я получаю ту же ошибку.   -  person mafortis    schedule 19.02.2018
comment
Давайте продолжим это обсуждение в чате.   -  person usrNotFound    schedule 19.02.2018


Ответы (2)


РЕШЕНО

проблема проверки была вызвана пустым значением цены, и это было из-за того, что мой цикл во внешнем интерфейсе при получении разной цены во время скидок и в других случаях, исправляя мой ценовой цикл, у меня есть цена моего продукта все время, и он больше не возвращает нуль в моей функции .

спасибо за помощь.

person mafortis    schedule 20.02.2018

если вы хотите преобразовать коллекцию в массив, просто используйте ->toarray()
Кроме того, выполнение запроса внутри цикла foreach является плохой практикой из-за проблемы с запросом N + 1, вы можете рассмотреть возможность использования findMany() вместо find()
также вы можете прочитать о array_filter тоже

person AH.Pooladvand    schedule 19.02.2018
comment
Конечно, toArray() преобразует коллекцию в массив, но видите ли, на самом деле он преобразует массив в объект CartCondition. - person usrNotFound; 19.02.2018
comment
@AH.Pooladvan, это ответ? - person user2749200; 19.02.2018
comment
Я согласен с этим. Запуск логики в коллекции, а не в массиве, будет намного эффективнее. - person Luke; 19.02.2018