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.