Magento 2: Wie füge ich mehrere Datensätze in eine benutzerdefinierte Tabelle ein?


7

Ich habe eine neue Tabelle in Magento2 erstellt: my_custom_tablemit 4 Feldern:

id: primary key, 
product_id: int(11), 
customer_id: int(11)
status:int(11)

Ich möchte mehrere Datensätze gleichzeitig speichern. Hier ist mein Code.

namespace Company\Module\Controller\Adminhtml\Index;    

class Save extends \Company\Module\Controller\Adminhtml\Index
    {

        protected $_filterProvider;
        protected $productModel;


        public function __construct(
            \Magento\Backend\App\Action\Context $context,
            \Magento\Framework\Registry $registry,
            \Magento\Cms\Model\Template\FilterProvider $filterProvider,
            \Company\Module\Model\Product  $productModel

        ) {
            $this->_filterProvider = $filterProvider;
            $this->productModel = $productModel;      

            parent::__construct($context,$registry);
        }

        public function execute()
        {
            $resultRedirect = $this->resultRedirectFactory->create();
            $data = $this->getRequest()->getPostValue();
            if ($data) {
                $products = array(12,13,14,14);
                $customerId = 1;
                foreach($products as $pdt){
                    $productModel = $this->productModel;                                  
                    $productModel->setData('product_id',$pdt);
                    $productModel->setData('customer_id',$customerId);
                    $productModel->setData('product_status',1);
                    $productModel->save();
                }
            }
            return $resultRedirect->setPath('*/*/new');
        }

    }  

Bitte hilf mir


Soweit ich weiß, kannst du nur mit for loop arbeiten.
— Ankit Shah

Aber es fügt nur eine Reihe hinzu
— Jancy Abraham


Bitte teilen Sie Ihre Module mit, vervollständigen Sie den Code und stellen Sie sicher, dass Ihr Primärschlüssel automatisch inkrementiert wird.
— Arunendra

Ja. Primärschlüssel ist die automatische Inkrementierung. Bitte überprüfen Sie den aktualisierten Code
— Jancy Abraham

Antworten:


10

Wir haben vergessen, das Datenmodell nach dem Speichern zu deaktivieren .

$productModel->save();
$productModel->unsetData();

[BEARBEITEN]

Die Verwendung von model Factory kann unser Problem lösen. Zum Beispiel Company\Module\Model\ProductFactoryin Konstruktor injizieren . Innerhalb der Schleife müssen wir nur die Fabrik erstellen.

$product = $this->productFactory->create();
$product->setData(....);
$product->save();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.