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

Jancy Abraham
quelle
Soweit ich weiß, kannst du nur mit for loop arbeiten.
Ankit Shah
Aber es fügt nur eine Reihe hinzu
Jancy Abraham
Folgen Sie diesem magento.stackexchange.com/questions/140612/…
Ankit Shah
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();
Khoa TruongDinh
quelle