Làm cách nào tôi có thể có được bộ sưu tập mô-đun tùy chỉnh trong magento 2


9

Tôi đang cố gắng tạo một mô-đun tùy chỉnh trong M 2 0.74.0-beta16. Làm thế nào tôi có thể có được bộ sưu tập của bảng tùy chỉnh. Tôi đã thử $this->_mymodulemodelFactory->create()->getCollection();. Tệp nhà máy được tạo cho mô-đun của tôi nhưng getCollection () lưu ý.


Câu trả lời của Anna Völkl làm việc trong magento 2.3.1
Vashy

Câu trả lời:


24

Bạn cần đưa nhà máy thu thập mô hình vào công cụ xây dựng của bạn

protected $mymodulemodelFactory;
public function __construct(
    ....
    \[Namespace]\[Module]\Model\ResourceModel\[Entity]\CollectionFactory $mymodulemodelFactory, 
    ...
)
{
    ...
    $this->mymodulemodelFactory = $mymodulemodelFactory;
    ...
}

và bạn có thể sử dụng trong bất kỳ một trong các phương thức lớp:

$collection = $this->mymodulemodelFactory->create();

Tôi đã thử tương tự cho nhập tùy chỉnh của mình để nhận bộ sưu tập sản phẩm, nhưng khi tôi nhập csv, biểu tượng tải ajax tải vô thời hạn @Marius
Sushivam 8/8/2016

Tôi muốn nhận bộ sưu tập sản phẩm dựa trên id thực thể và lưu các id thực thể đó vào bảng tùy chỉnh của mình
Sushivam

18

Bạn cần tạo ba tệp để nhận bộ sưu tập từ mô-đun tùy chỉnh

1) Model, 2) ResourceModel, 3) Bộ sưu tập

Không gian tên: Hoàng tử

Mô-đun: Xin chào

Bảng: xin chào

1) Tạo tập tin mô hình Hello.php tại

ứng dụng / mã / Hoàng tử / Hellowworld / Model / Hello.php

<?php

namespace Prince\Helloworld\Model;

use Magento\Framework\Model\AbstractModel;

class Hello extends AbstractModel
{
    /**
     * Define resource model
     */
    protected function _construct()
    {
        $this->_init('Prince\Helloworld\Model\ResourceModel\Hello');
    }
}

2) Bây giờ tạo Hello.php ResourceModel tại

ứng dụng / mã / Prince / Hellowworld / Model / ResourceModel / Hello.php

<?php

namespace Prince\Helloworld\Model\ResourceModel;

use Magento\Framework\Model\ResourceModel\Db\AbstractDb;

class Hello extends AbstractDb
{
    /**
     * Define main table
     */
    protected function _construct()
    {
        $this->_init('hello', 'id'); //hello is table of module
    }
}

3) Bây giờ tạo tập tin Collection.php Collection tại

ứng dụng / mã / Prince / Hellowworld / Model / ResourceModel / Hello / Collection.php

<?php

namespace Prince\Helloworld\Model\ResourceModel\Hello;

use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;

class Collection extends AbstractCollection
{
    /**
     * Define model & resource model
     */
    protected function _construct()
    {
        $this->_init(
            'Prince\Helloworld\Model\Hello',
            'Prince\Helloworld\Model\ResourceModel\Hello'
        );
    }
}

Bây giờ bạn có thể kiểm tra bộ sưu tập của bạn trong Index.phpbộ điều khiểnapp/code/Prince/Helloworld/Controller/Index/Index.php

<?php

namespace Prince\Helloworld\Controller\Index;

use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Prince\Helloworld\Model\HelloFactory;

class Index extends Action
{
    protected $_modelHelloFactory;

    public function __construct(
        Context $context, 
        HelloFactory $modelHelloFactory
    ) {
        parent::__construct($context);
        $this->_modelHelloFactory = $modelHelloFactory;
    }

    public function execute()
    {

        $resultPage = $this->_modelHelloFactory->create();
        $collection = $resultPage->getCollection(); //Get Collection of module data
        var_dump($collection->getData());
        exit;

    }
}

Nếu bạn muốn lấy bộ sưu tập trong mẫu bằng cách sử dụng tệp khối

Bốn tệp khác bạn cần thêm nad tạo

1. Chặn tập tin

2. Bố cục tập tin

3. Tệp điều khiển

4. Tập tin Templarte

Tạo tập tin khối Hello.php

namespace vendorName\ModuleName\Block\Index;

use Magento\Framework\App\RequestInterface;
use vendorName\ModuleName\Model\Hello;

class Hello extends \Magento\Framework\View\Element\Template 
{
    protected $helloModelFactory;
    protected $request;

    public function __construct(
        \Magento\Catalog\Block\Product\Context $context,
        Hello $helloModelFactory,
        RequestInterface $request,
        array $data = []
    ) {
        parent::__construct($context, $data);
        $this->_helloModelFactory = $helloModelFactory;
        $this->_request = $request;
    }

    /**
     * Preparing global layout
     *
     * @return $this
     */
    protected function _prepareLayout() {
        parent::_prepareLayout();
        $this->pageConfig->getTitle()->set(__('Display Collection'));
        return $this;
    }

    public function getHello()
    {
        $collection = $this->_helloModelFactory->getCollection();
        return $collection;
    }
}

Hoặc Tạo tệp Bố cục RoutName_controllername_index.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
             <block class="vendorName\ModuleName\Block\Event\Index" name="newevent" template="vendorName_ModuleName::Index.phtml" />
        </referenceContainer>
    </body>
</page>

Tạo tập tin điều khiển Index.php

<?php
namespace vendorName\ModuleName\Controller\Index;

use Magento\Framework\App\Action;
use Magento\Framework\View\Result\PageFactory;

class Index extends \Magento\Framework\App\Action\Action 
{
    /**
     * @param Action\Context $context
     */

    protected $resultPageFactory;

    public function __construct(
        Action\Context $context,
        PageFactory $resultPageFactory
    ) {
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
    }

    public function execute() {

        $this->_view->loadLayout();
        $this->_view->renderLayout();
    }
}

Tạo tập tin mẫu Index.phtml

<?php

var_dump($block->getgetHello()->getData());

Tôi hy vọng nó hoạt động mãi mãi


sử dụng Prince \ Hellowworld \ Model \ HelloFactory; đây là đâu?
george jibin

xin lỗi vì điều đó
jibin george

HOw tôi có nhận được dữ liệu đầy đủ vào một mảng không? bạn đang thay đổi dữ liệu ở đó bằng cách nào tôi có thể lấy toàn bộ dữ liệu vào mảng?
george jibin

1

thử cái này $collection = $this->_mymodulemodelFactory->create()


1

Tôi biết đó là một chủ đề cũ, nhưng giải pháp tốt nhất để có được mô hìnhbộ sưu tập với một tiêm đơn giản:

  • đảm bảo rằng Mô hình của bạn triển khai ModelInterface của bạn và bạn đặt tùy chọn cho ModelInterface của bạn trong di.xml

<preference for="Your\Module\Api\Data\ModelInterface" type="Your\Module\Model\Model"/>

  • Tiêm ModelInterfaceFactory cho hàm tạo

  protected $_modelFactory;   public function __construct( .... \Your\Module\Api\Data\ModelInterfaceFactory $modelFactory, ... ) { ... $this->_modelFactory = $modelFactory; ... }

  • và chỉ sử dụng bất cứ nơi nào trong lớp

    cho bộ sưu tập:

    $collection = $this->_modelFactory->create()->getCollection();

    cho mô hình:

    $model = $this->_modelFactory->create();

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.