Magento 2 中的 CRUD 模型

1、设置数据库脚本(安装、升级)

2、创建模型(类似:laravel / yii的model,model实现抽象类、接口;但不执行sql查询)

3、创建资源模型

Magento 中的每个 CRUD 资源模型都必须扩展抽象类\Magento\Framework\Model\ResourceModel\Db\AbstractDb,其中包含从数据库中获取信息的功能。

第 4 步:创建资源模型集合 - 获取模型集合

集合模型被认为是一种资源模型,它允许我们过滤和获取集合表数据。集合模型将放置在:

app/code/Mageplaza/HelloWorld/Model/ResourceModel/Post/Collection.php

该文件的内容:

<?php
namespace Mageplaza\HelloWorld\Model\ResourceModel\Post;
class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection{
	protected $_idFieldName = 'post_id';
	protected $_eventPrefix = 'mageplaza_helloworld_post_collection';
	protected $_eventObject = 'post_collection';
	/**
	 * Define resource model
	 *
	 * @return void
	 */
	protected function _construct()
	{
		$this->_init('Mageplaza\HelloWorld\Model\Post', 'Mageplaza\HelloWorld\Model\ResourceModel\Post');
	}}

CRUD 集合类必须从函数中扩展\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection并调用_init()初始化模型、资源模型的_construct()方法。

第 5 步:工厂对象

我们完成了数据库表、CRUD 模型、资源模型和集合的创建。那么如何使用它们呢?

在这一部分中,我们将讨论模型的工厂对象。正如您在 OOP 中所知道的,工厂方法将用于实例化对象。在 Magento 中,工厂对象做同样的事情。

工厂类名称是模型类的名称,并附加“工厂”字样。因此,对于我们的示例,我们将拥有 PostFactory 类。您不得创建此类。Magento 将为您创建它。var/generation每当 Magento 的对象管理器遇到以单词“Factory”结尾的类名时,如果该类尚不存在,它将自动在文件夹中生成 Factory 类。你会看到工厂类

var/generation/<vendor_name>/<module_name>/Model/ClassFactory.php

在这种情况下,它将是:

var/generation/Mageplaza/HelloWorld/Model/PostFactory.php

为了实例化模型对象,我们将使用自动构造函数依赖注入来注入工厂对象,然后使用工厂对象来实例化模型对象。

例如,我们将调用模型来获取控制器中的数据。

app/code/Mageplaza/HelloWorld/Controller/Index/Index.php

此文件的内容:

<?php

namespace Mageplaza\HelloWorld\Controller\Index;
class Index extends \Magento\Framework\App\Action\Action{
	protected $_pageFactory;
	protected $_postFactory;
	public function __construct(
		\Magento\Framework\App\Action\Context $context,
		\Magento\Framework\View\Result\PageFactory $pageFactory,
		\Mageplaza\HelloWorld\Model\PostFactory $postFactory
		)
	{
		$this->_pageFactory = $pageFactory;
		$this->_postFactory = $postFactory;
		return parent::__construct($context);
	}
	public function execute()
	{
		$post = $this->_postFactory->create();
		$collection = $post->getCollection();
		foreach($collection as $item){
			echo "<pre>";
			print_r($item->getData());
			echo "</pre>";
		}
		exit();
		return $this->_pageFactory->create();
	}}

正如您在此控制器中看到的, PostFactory 对象将在_construct()函数中创建。execute()函数中,我们使用$post = $this->_postFactory->create();创建模型对象。


nba2k2球员数据
请先登录后发表评论
  • 最新评论
  • 总共0条评论