Magento2 CRUD模型,与数据库交互

文章来源: 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

)

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181124G1RC6Q00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券