カスタムテーブルフィールドを取得して表示する簡単なMagento2の例?


7

Magento2データベースにカスタムテーブルがあり、Magento2ページでフィールドデータを接続、取得、および表示する方法の簡単な実際の例が見つかりません。

これはほとんど機能しますが、フィールドのフェッチで停止するので不完全ですが、実際にWebページにフィールドを表示する方法は示していません。http//webkul.com/blog/magento2-write-custom-mysql-query-without -using-model /

誰かが完全な例を提供できますか?


1
Magento 2の場合、以下のCRUDジェネレーターを使用していますmage2gen.com
Ankit Shah

回答:


23

モデルなしのCRUD操作を説明するチュートリアルについて説明しましたが、オブジェクトマネージャを使用することはお勧めできません。

モデルでクラッド操作を説明させてください、それは非常に簡単です。これはMagentoで非常に重要な概念です。

たとえば、以下のテーブル構造を考えてみましょう

ここに画像の説明を入力してください

CRUD操作では、3つのものを作成する必要があります

1.モデル

モデルでは、リソースモデルを初期化する必要があります

app/code/<vendor>/<module>/Model/Example.php

<?php
namespace <vendor>\<module>\Model;
use Magento\Framework\Model\AbstractModel;
class Example extends AbstractModel
{
    /**
     * Define resource model
     */
    protected function _construct()
    {
    $this->_init('<vendor>\<module>\Model\ResourceModel\Example');
    }
}

2.リソースモデル

リソースモデルでは、テーブル名と主キーを初期化する必要があります。

app/code/<vendor>/<module>/Model/ResourceModel/Example.php

<?php
namespace <vendor>\<module>\Model\Resource;
class Example extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
{
    /**
     * Define main table
     */
    protected function _construct()
    {
    $this->_init('custom_table_name', 'id');   //here id is the primary key of custom table
    }
}

3.コレクション

コレクションでは、モデルとリソースモデルを定義する必要があります。

app/code/<vendor>/<module>/Model/ResourceModel/Example/Collection.php

<?php
namespace <vendor>\<module>\Model\ResourceModel\Example;

class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
{
    /**
     * Define model & resource model
     */
    protected function _construct()
    {
    $this->_init(
        '<vendor>\<module>\Model\Example',
        '<vendor>\<module>\Model\ResourceModel\Example'
    );

    }
}

以上で、依存関係注入を使用して任意のブロックでテーブル値をフェッチできるようになりました。

例: ブロック内のデータの取得と設定

親切に<module>\<vendor>\Model\ExampleFactory、コンストラクタを渡し ますが、その場所にファイルはありません

Magento 2では、各CRUDモデルに対応するファクトリクラスがあります。すべてのファクトリクラス名は、「Factory」という単語が追加されたモデルクラスの名前です。モデルクラスには名前が付けられて <module>/<vendor>/Model/Exampleいるため、ファクトリクラスには<module>/<vendor>/Model/ExampleFactory

………………….
………………….

protected $_exampleFactory; 

public function __construct( <vendor>\<module>\Model\ExampleFactory $db)
{
    $this->_exampleFactory = $db;
}
public function anyMethodYouWant()
{
//set value
$this->_exampleFactory->create()->setData(array('event_name' => 'xyz', 'event_imgurl' => 'xyz',...............))->save();

//get value
$data=$this->_exampleFactory->create()->getCollection();
foreach ($data as $d ) 
{
       echo $d->getEventImgurl();   //table field event_imgurl
       echo $d->getEventName();    //table field event_name
}

}

その後、テンプレートファイルでこのブロックメソッドを呼び出すことができます

<?php $block->anyMethodYouWant(); ?>

@Bilal-(このコードを記述しなければならない場合、plsがパスを与えることを意味します)protected $ _exampleFactory; public function __construct(<vendor> / <module> / Model / ExampleFactory $ db){$ this-> _ exampleFactory = $ db; } public function anyMethodYouWant(){$ this-> _ exampleFactory-> create()-> setData(array( 'event_name' => 'xyz'、 'event_imgurl' => 'xyz'、......... ......))-> save(); $ data = $ this-> _ exampleFactory-> create()-> getCollection(); foreach($ data as $ d){echo $ d-> getEventImgurl(); echo $ d-> getEventName(); }}
Khushbu_sipl 2017

@BilalUseanをよく説明してください。:)
Sanchit Gupta

最後に、Magento2でモデルを実行するための簡単な説明を見つけました
slayerbleast
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.