文章来源: https://www.mageplaza.com/magento-2-module-development/how-to-create-crud-model-magento-2.html
# 本文做交流学习使用,文章来源见上面连接。如有出错欢迎指出
总步骤:
第1步:安装脚本
第2步:创建模型
第3步:创建资源模型
第4步:创建资源模型集合
第5步:工厂对象
1、安装脚本
为CRUD模型创建数据库表——插入安装文件:
路径:app/code/Mageplaza/HelloWorld/Setup/InstallSchema.php
该文件创建 mageplaza_helloworld_post 表 # 相当于python模型类。需要手动执行部署安装。
InstallSchema.php 文件如下:
此内容显示了如何创建表,您可以编辑它以创建自己的表。请注意,Magento将在安装模块时首次自动运行此文件。如果之前安装了模块,则需要升级模块并将表创建代码写入该文件夹中的UpgradeSchema.php,并将属性更改为setup_version大于当前安装版本module.xml
路径: app/code/Mageplaza/HelloWorld/etc/module.xml。
module.xml 文件:
路径: app/code/Mageplaza/HelloWorld/Setup/UpgradeSchema.php
UpgradeSchema.php 文件:
在此之后请运行此命令行:
现在检查数据库,您将看到一个包含名称mageplaza_helloworld_post和上面列的表。如果未创建此表,可能是因为在向InstallSchema.php添加内容之前运行了上述命令行。要解决此问题,您需要删除让Magento知道您的模块已安装在系统中的信息。请打开表'setup_module',找到并删除一行等于的模块mageplaza_helloworld_post。在此之后,再次运行该命令以安装该表。
这InstallSchema.php用于创建数据库结构。如果要将数据安装到创建的表中,则需要使用InstallData.phpfile:
请查看Magento中的一些InstallData文件,了解如何使用它。这是你可以看到的一些文件:
- vendor/magento/module-tax/Setup/InstallData.php
- vendor/magento/module-customer/Setup/InstallData.php
- vendor/magento/module-catalog/Setup/InstallData.php
如上所述,那些安装文件将用于第一次安装模块。如果要在升级模块时更改数据库,请尝试使用UpgradeSchema.php和UpgradeData.php。
2、创建模型Model文件 # orm文件
路径:
app/code/Mageplaza/HelloWorld/Model/Post.php
Post.php 文件:
# IdentityInterface将强制Model类定义getIdentities()将返回模型的唯一ID 的方法。 如果模型在数据库操作后需要缓存刷新并将信息呈现到前端页面,则必须仅使用此接口。
在模型中使用的一些变量:
$_eventPrefix - 要触发的事件的前缀
$_eventObject - 事件访问时的对象名称
$_cacheTag - 在缓存中使用的唯一标识符
3、创建 Resource Model (资源模型)
作用: 模型文件包含所有的 数据库逻辑,但是没有sql 查询语句。 我们将在Resource Model (资源模型)中实现查询。
Resource Model(资源模型)路径: app/code/Mageplaza/HelloWorld/Model/ResourceModel/Post.php
其内容为:
Magento中的每个CRUD资源模型都必须扩展抽象类\Magento\Framework\Model\ResourceModel\Db\AbstractDb,其中包含从数据库中获取信息的函数。
与模型类一样,此资源模型类将具有必需的方法_construct()。此方法将调用_init()函数来定义该表的表名和主键。在这个例子中,我们有表mageplaza_helloworld_post和主键post_id。
4、Create Resource Model Collection - Get Model Collection
作用: Thecollection modelis considered a resource model which allow us to filter and fetch a collection table data. # 集合模型被认为是一种资源模型,它允许我们过滤和获取集合表数据。
路径: app/code/Mageplaza/HelloWorld/Model/ResourceModel/Post/Collection.php
Collection.php :
The CRUD collection class must extends from \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection and call the _init()method to init the model, resource model in _construct() function.
# CRUD 收集类必须继承 \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
和调用 _init() 方法去初始化模型,资源模型写在_construct() 函数中。
5、创建 Factory Object。 (工厂对象)
作用: 对 数据库表(database table),CRUD模型( CRUD model),资源模型( resource model),集合( collection)处理。 # OOP 工厂方法方法.
每当Magento的对象管理器遇到以“Factory”结尾的类名时,如果该类尚不存在,它将自动在var / generation文件夹中生成Factory类. 路径如下:
var/generation///Model/ClassFactory.php
本文中路径如下:
var/generation/Mageplaza/HelloWorld/Model/PostFactory.php
要实例化模型对象,我们需要自己构建函数,通过工厂模式来实例化模型对象.
例如: 我们通过在控制器中调用模型来获取数据.
app/code/Mageplaza/HelloWorld/Controller/Index/Index.php
Index.php 修改为如下:
在这个控制器中,我们可以通过 _construct() 函数创建 PostFactory 对象,在 execute() 函数中,我们通过 $post = $this->_postFactory->create(); 这个语句创建模型对象.
# test if success:
go to phpmyadmin and open mageplaza_helloworld_post table to add some record to test post model work.
# 转到phpmyadmin并打开mageplaza_helloworld_post表格来添加一些记录来测试刚刚post model是否工作
# 如果找不到 phpmyadmin 直接打开数据库mageplaza_helloworld_post表添加数据。
测试是否通过路径:
http:///helloworld/index/index
结果如下:
Array
(
[post_id] => 1
[name] => hsh
[url_key] => 121
[post_content] => 123
[tags] => 456
[status] => 789
[featured_image] => 123
[created_at] => 2018-10-17 11:35:48
[updated_at] => 2018-10-17 11:35:48
)
领取专属 10元无门槛券
私享最新 技术干货