Magento2データベースにカスタムテーブルがあり、Magento2ページでフィールドデータを接続、取得、および表示する方法の簡単な実際の例が見つかりません。
これはほとんど機能しますが、フィールドのフェッチで停止するので不完全ですが、実際にWebページにフィールドを表示する方法は示していません。http: //webkul.com/blog/magento2-write-custom-mysql-query-without -using-model /
誰かが完全な例を提供できますか?
Magento2データベースにカスタムテーブルがあり、Magento2ページでフィールドデータを接続、取得、および表示する方法の簡単な実際の例が見つかりません。
これはほとんど機能しますが、フィールドのフェッチで停止するので不完全ですが、実際にWebページにフィールドを表示する方法は示していません。http: //webkul.com/blog/magento2-write-custom-mysql-query-without -using-model /
誰かが完全な例を提供できますか?
回答:
モデルなしの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(); ?>