Magento CURD
- 创建数据库表
- 创建模型-CRUD模型
Model是MVC架构的一条巨大路径。在Magento 2 CRUD中,模型具有许多不同的功能,例如管理数据,安装或升级模块。在本教程中,我只讨论数据管理CRUD。我们必须创建Model,Resource Model,Resource Model Conllection来管理表中的数据:app/code/Mageplaza/HelloWorld/Model/Post.php
<?php
namespace Mageplaza\HelloWorld\Model;
class Post extends \Magento\Framework\Model\AbstractModel implements \Magento\Framework\DataObject\IdentityInterface
{
const CACHE_TAG = 'mageplaza_helloworld_post'; protected $_cacheTag = 'mageplaza_helloworld_post'; protected $_eventPrefix = 'mageplaza_helloworld_post'; protected function _construct()
{
$this->_init('Mageplaza\HelloWorld\Model\ResourceModel\Post');
} public function getIdentities()
{
return [self::CACHE_TAG . '_' . $this->getId()];
} public function getDefaultValues()
{
$values = []; return $values;
}
}该模型类将扩展AbstractModel类Magento\Framework\Model\AbstractModel并实现\Magento\Framework\DataObject\IdentityInterface。IdentityInterface将强制Model类定义getIdentities()将返回模型的唯一ID 的方法。如果模型在数据库操作后需要缓存刷新并将信息呈现到前端页面,则必须仅使用此接口。
_construct()只要模型被实例化,就会调用该方法。每个CRUD模型都必须使用_construct()方法来调用_init()方法。这个_init()方法将定义实际从数据库中获取信息的资源模型。如上所述,我们定义了资源模型Mageplaza \ Post \ Model \ ResourceModel \ Post关于模型的最后一件事是你应该在模型中使用的一些变量:
1。$_eventPrefix - 要触发的事件的前缀
2。$_eventObject - 事件访问时的对象名称
3。$_cacheTag - 在缓存中使用的唯一标识符 - 创建资源模型
模型文件包含整体数据库逻辑,它不执行sql查询。资源模型将这样做。现在我们将为此表创建资源模型:app/code/Mageplaza/HelloWorld/Model/ResourceModel/Post.php
<?php
namespace Mageplaza\HelloWorld\Model\ResourceModel; class Post extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
{ public function __construct(
\Magento\Framework\Model\ResourceModel\Db\Context $context
)
{
parent::__construct($context);
} protected function _construct()
{
$this->_init('mageplaza_helloworld_post', 'post_id');
} }Magento中的每个CRUD资源模型都必须扩展抽象类\Magento\Framework\Model\ResourceModel\Db\AbstractDb,其中包含从数据库中获取信息的函数。
与模型类一样,此资源模型类将具有必需的方法_construct()。此方法将调用_init()函数来定义该表的表名和主键。在这个例子中,我们有表mageplaza_helloworld_post和主键post_id。
- 创建资源模型集合 - 获取模型集合
该集合模型被认为是一个资源模型使我们能够筛选和获取集合表中的数据。收集模型将放在: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()。
- 工厂对象
我们完成了创建数据库表,CRUD模型,资源模型和集合。那么如何使用它们?在OOP中,将使用工厂方法来实例化对象。在Magento中,Factory Object也做同样的事情。
Factory类名称是Model类的名称,并附加“Factory”字样。所以对于我们的例子,我们将有PostFactory类。您不能创建此类。Magento将为您创造它。每当Magento的对象管理器遇到以“Factory”结尾的类名时,如果该类尚不存在,它将自动在var / generation文件夹中生成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();
}
}正如您在此控制器中看到的,将在_construct()函数中创建PostFactory对象。
在execute()函数中,我们$post = $this->_postFactory->create();用来创建模型对象。
- 数据对象模型
/vendor/magento/framework/DataObject.php
- -
Magento CURD的更多相关文章
- magento CURD操作
查询: $model = Mage::getModel('mynews/mynews'); $collection = $model->getCollection(); $collection- ...
- 通过Http接口及SolrNet 两种方法基于Solr5.5.1 实现CURD
前言 老规矩,任何技术的入门我通常都会总结增删改查,本文我就通过HttpWebRequest和SolrNet的方式实现Solr最基础的增删改查(CURD).对于自己的完整项目,同时不想过于依赖第三方类 ...
- Yii框架CURD方法
在YII框架中,CURD有2种方式: 1.AR模式:2. DAO模式 AR模式下 查全部 MODEL $model->find()->asArray()->all()查单 个 ...
- Mongodb 数据类型及Mongoose常用CURD
前言 看完了Node.js实战,其中在数据存储部分提到了Redis.Mongodb,我自己也根据书中的介绍写了几个简单的demo,在demo的过程首先遇到的问题就是数据类型和常见的CURD写法. mo ...
- Angularjs CURD
前言 基于一个手机端的项目使用了angularjs,硬着头皮去用,有很多的疑问还需要一一去验证,刚开始总是感觉找不到北,总是感觉有很多概念,而且似乎ng既夹杂MVC又夹杂MVVM的思想, 忙里偷闲敲了 ...
- ThinkPHP3快速入门教程二:数据CURD
CURD(创建[Create].更新[Updata].读取[Read].删除[Delete]),定义了用于处理数据的基本原子操作. CURD在具体的应用中并非一定使用create.updata.rea ...
- MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)
回到目录 我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋 ...
- LNMP环境magento常见错误
一.安装报404错误 git clone 下最新代码,跳转到index/install 安装时出现404错误 需要把伪静态规则加到nginx配置文件中: # # The default server ...
- Magento 新增字段的值读写丢失原因
某实体新增字段handreturn_status,欲操作之: $order_info = Mage::getModel('sales/order')->load($order_id); //se ...
随机推荐
- Java新知识系列 八
什么是死锁,死锁的原因和必要条件: []什么是死锁,死锁的原因和必要条件: 死锁:死锁的原因在于进程在等待其它进程占有的某些资源,而自身的资源又被其它进程等待着,造成了死循环. 出现死锁的 ...
- stereoscopic 3D
色分(Anaglyph)模式:典型的如红蓝立体,是利用红镜片只允许红光通过,蓝镜片只允许蓝光通过的原理,将两幅视差的图片(一张红色.一张蓝色)叠加构成一张立体图片 由于红蓝立体去掉了绿色分量,会导致最 ...
- c#二进制移位运算符 "<<"及">>","&","|","^"
移位运算符 & :按位与,其实与&&逻辑运算符有一致的地方: | :按位或,同样与||有类似的地方. ~:按位取反 ^:按位异或 <<:左移运算符 >> ...
- c/c++ 重载运算符 ==和!=的重载
重载运算符 ==和!=的重载 问题:假如有一个类似于vector的类,这个类只能存放string,当有2个这个类的对象时,如何比较这2个对象. 自己重载==和!= 代码(重载==,!=) #inclu ...
- 利用ZYNQ SOC快速打开算法验证通路(2)——数据传输最简方案:网络调试助手+W5500协议栈芯片
在上一篇该系列博文中讲解了MATLAB待处理数据写入.bin二进制数据文件的过程,接下来需要将数据通过以太网发送到ZYNQ验证平台.之前了解过Xilinx公司面向DSP开发的System Genera ...
- oracle EM 如何调整界面显示的语言
EM是通过浏览器语言来识别界面语言的,没有选项调整.我以chrome为例将默认中文改为英文: EM调整前为中文界面: 调整chrome语言显示为英文: 再重新开一个窗口,打开EM,界面已经调整为英文了 ...
- GMM算法的matlab程序
GMM算法的matlab程序 在“GMM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...
- 码农人生——从未学过Android如何开发Android App 案例讲解-第002期案例
标题有点晃眼,本次分享是002期博文的实践故事,不会有任何代码.也不会教别人android 如何开发,类似博文已经有大批大批,而且还会有陆陆续续的人写,我写的文章,主要是经验之谈,希望总结出的一些方法 ...
- Django REST framework 中文文档
Django REST framework介绍 现在前后端分离的架构设计越来越流行,业界甚至出现了API优先的趋势. 显然API开发已经成为后端程序员的必备技能了,那作为Python程序员特别是把Dj ...
- Django REST framework基础:认证、权限、限制
认证.权限和限制 身份验证是将传入请求与一组标识凭据(例如请求来自的用户或其签名的令牌)相关联的机制.然后 权限 和 限制 组件决定是否拒绝这个请求. 简单来说就是: 认证确定了你是谁 权限确定你能不 ...