Mendapatkan Nilai atribut produk pada halaman keranjang bahkan tidak ditugaskan untuk produk tertentu Magento 2

8

Saya mendapatkan atribut produk dari penawaran. Sepertinya ada nilai yang salah datang. Silakan periksa kode saya di bawah ini.

 $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 $cart = $objectManager->get('\Magento\Checkout\Model\Cart');
 $itemsCollection = $cart->getQuote()->getItemsCollection();
 $itemsVisible = $cart->getQuote()->getAllVisibleItems();
 $items = $cart->getQuote()->getAllItems();

 $product_object = $objectManager->create('Magento\Catalog\Model\Product');

 foreach($itemsVisible as $item){                
      if($option = $item->getOptionByCode('simple_product')) {
           $productId = $option->getProduct()->getId();
           $item_s = $product_object->load($productId);
           echo $screen_size =   $productId."/".$item_s->getScreenFrameSize()."/".$item_s->getFiberglassScreenRollSize()."/".$item_s->getScreenCornerSize()."<br>";
      }
 }

Silakan periksa gambar di bawah ini untuk pemahaman yang lebih baik. Apakah ada kesalahan dalam koleksi atau loop saya?

masukkan deskripsi gambar di sini

Tolong bantu aku!!!

Sunny Rahevar
sumber
Saya telah menggunakan fungsi tidak disetel ini sebelum $ item_s = $ product_object-> load ($ productId) ;. Tidak berhasil !! Apakah ada masalah dalam kode saya? saya tidak tahu mengapa ini terjadi !!
Sunny Rahevar
Anda harus membuat objek $objectManager->create('Magento\Catalog\Model\Product');dalam foreach loop. Periksa jawabanku
Pangeran Patel

Jawaban:

3

Karena Anda menggunakan objek yang sama setiap kali di foreach. Anda harus membuat objek baru di foreach loop. Jadi kode akhir Anda terlihat seperti ini:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cart = $objectManager->get('\Magento\Checkout\Model\Cart');
$itemsCollection = $cart->getQuote()->getItemsCollection();
$itemsVisible = $cart->getQuote()->getAllVisibleItems();
$items = $cart->getQuote()->getAllItems();

foreach($itemsVisible as $item){                
  if($option = $item->getOptionByCode('simple_product')) {
       $productId = $option->getProduct()->getId();
       $product_object = $objectManager->create('Magento\Catalog\Model\Product');
       $item_s = $product_object->load($productId);
       echo $screen_size =   $productId."/".$item_s->getScreenFrameSize()."/".$item_s->getFiberglassScreenRollSize()."/".$item_s->getScreenCornerSize()."<br>";
  }
}

CATATAN: Jangan gunakan manajer objek secara langsung dalam kode. Gunakan pabrik produk karena pabrik akan membuat objek baru setiap saat.

Pangeran Patel
sumber
2

Silakan coba sesuatu seperti ini

....

function productData($pro_id)
{   
       $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
       $product_object = $objectManager->create('Magento\Catalog\Model\Product');
       $item_s = $product_object->load($pro_id);
       return $item_s;
}

....

$item_s = productData($productId); //In foreach loop
Divyarajsinh Dodiya
sumber
Ya, saya telah mengikuti cara yang sama seperti yang Anda sebutkan dan itu bekerja untuk saya!
Sunny Rahevar
1

Saya kira Anda harus membuat objek produk baru alih-alih menggunakannya kembali di loop foreach Anda. Dengan menggunakan kembali objek produk Anda bisa mendapatkan efek samping seperti itu bahkan jika metode "memuat" menunjukkan, bahwa setiap data akan ditimpa. Periksa penggunaan atribut khusus diAbstractExtensibleModel

HelgeB
sumber