在这一章,我们将学习一下内容: 注册资源模型 注册资源连接 安装和升级脚本 创建一个单一的表模型 使用Magento Collection来查询数据 介绍 在上一章,我们学习了怎么Magento数据库是怎么工作的,我们如何连接数据库并且如何跟数据库交互。 在这一章, 我们
在这一章,我们将学习一下内容:
注册资源模型
注册资源连接
安装和升级脚本
创建一个单一的表模型
使用Magento Collection来查询数据
介绍
在上一章,我们学习了怎么Magento数据库是怎么工作的,我们如何连接数据库并且如何跟数据库交互。
在这一章,我们将把我们上一章学习的知识去执行一些更实际的任务。我们将让我们第4章创建的模块与数据库的交互。
我们将创建Magento模块和一个与之交互的数据表
注册资源模型
我们要做的第一步就是注册资源模型,编写资源模型来与数据库进行业务逻辑的交互。
准备工作
我们必须在config.xml 文件中添加另外的配置块.打开 app/code/local/Packt/Helloworld/etc/config.xml 文件
怎么做
下面一步步来分析怎么在Packt_Helloworld模块中来注册资源模型
<global> <blocks> <helloworld> <class>Packt_Helloworld_Block</class> </helloworld> </blocks> <helpers> <helloworld> <class>Packt_Helloworld_Helper</class> </helloworld> </helpers> <models> <helloworld> <class>Packt_Helloworld_Model</class> </helloworld> <helloworld_resource> <class>Packt_Helloworld_Model_Resource</class> </helloworld_resource> </models> </global>
3、创建文件夹 app/code/local/Packt/Helloworld/Model/Resource
<models> <helloworld> <class>Packt_Helloworld_Model</class> </helloworld> <helloworld_resource> <class>Packt_Helloworld_Model_Resource</class> </helloworld_resource> </models>
5、使用wiz命令行工具测试你的配置
wiz devel-models | grep helloworld
你现在将看到如下输出:
上面的命令将显示所有与helloworld想匹配的注册的模块。
它是如何工作的
这个Magento模型使用了业务逻辑,例如,通过一个观察者模式包含的函数可以调用事件或者定时任务。
一个Magento对象能够代表一个实体,比如一个产品、客户和分类。这个模型代表一个实体通过继承Mage_Core_Abstract类。这个类有使用资源模型的逻辑。例如,save()函数在这个类里面已经定义好了。
当你在Mage_Core_Model_Abstract类中看到save()函数,你会看到它调用了getResource()函数,这个getResource()函数将返回一个资源模型的实体。
资源模型使用实体与数据库交互,Magento特定的业务逻辑都是通过这个实体来调用和操作。
如果你想获得一个资源模型实例,你可以使用Mage::getResourceModel()或者Mage::getResourcdeSingleton()方法去获得一个类的实例,我们可以通过Magento类名的的一个参数获得。
注册资源连接
在这一节,我们将在这个模块中配置read和write适配器。这些适配器在模型中用于连接数据库。
准备
下面我们将一步一步在Packt_Helloworld模块中创建read和write连接:
<resources> <helloworld_read> <connection> <use>core_read</use> </connection> </helloworld_read> </resources>
<resources> <helloworld_write> <connection> <use>core_write</use> </connection> </helloworld_write> <helloworld_read> <connection> <use>core_read</use> </connection> </helloworld_read> </resources>3、完成上面步骤之后在后头清空cache
它是如何工作的
每一个模型在Magento中都分派了read和write适配器,默认的read适配器是core_read,默认的write适配器是core_write。
通常情况下,在Magento数据库中的表在models均使用core_read和core_write适配器进行操作。
更多...
你可以注册和配置一个特殊的数据库模型来连接其他的数据库,如果你打开下面的URL,你可以得到一个好的教你怎么做的教程:
http://www.solvingmagento.com/accessing-an-external-database-fromyour-magento-module/
sql安装和升级的脚本
如果你的模块使用的是自定义的数据库表,你需要在你的产品服务器上做一些改变。Magento会自动根据安装或更新脚本执行SQL。
在这里,我们将要扩展Packt_Helloworld模块的install脚本.这个install脚本将把属性添加到所有的产品中。
准备
在这里,我们将在模块的数据库文件夹中工作。从Packt_Helloworld模块中打开我们的数据库文件夹来写代码。
怎么做
下面将逐步描述在我们模块中创建安装脚本的过程:
<helloworld_setup> <setup> <module>Packt_Helloworld</module> <class>Mage_Eav_Model_Entity_Setup</class> </setup> <connection> <use>core_setup</use> </connection> </helloworld_setup>上面的代码将初始化一个名称为helloworld_setup的过程
2、在安装脚本中创建文件夹,这个文件夹名称在app/code/local/Packt/Helloworld/sql/helloworld_setup.
3、创建安装脚本,安装脚本的名称规则为install-
4、添加下面的内容到文件中测试执行过程:
die('test');
5、在前台页面清除缓存和刷新页面,你将在页面看到test.
tips:一个安装或者升级脚本时会在安装时运行一次。这里的版本号每次都将注册设置到数据表core_resource中。当你想再次测试时运行脚本。你能够删除或者改变版本。
6、添加下面的内容到你的安装脚本,这里会安装一个属性到所有的可用产品中.
<?php $installer = $this; $installer->startSetup(); $installer->addAttribute('catalog_product', 'helloworld_label', array( 'group' => 'Helloworld', 'type' => 'varchar', 'label' => 'Helloworld label', 'input' => 'text', 'global' => Mage_Catalog_Model_Resource_Eav_ Attribute::SCOPE_STORE, 'visible' => true, 'required' => false, 'searchable' => false, 'filterable' => false, 'comparable' => false, 'visible_on_front' => true, 'unique' => false, 'apply_to' => 'simple,configurable,virtual, bundle,downloadable', 'is_configurable' => false ) ); $installer->endSetup();
上面的代码将创建helloworld_label产品属性,这个属性将应用到所有的产品中。这个属性将在后台的在Helloworld选项卡的group选项中显示。
7、清理缓存和刷新页面,这个安装脚本将自动的运行。
8、到后台打开一个产品去检查属性是否在产品中添加,你将看到一个Helloworld选项卡的属性,它类似于下面的截图:
9、当你的安装脚本执行了,你能在Magento的core_resource表中看到你的设置。所有的模块和版本号都在这个表中,所以Magento知道安装或者升级脚本有没有执行。
它是怎么工作的...
你想在工作中改变一些你的数据结构使用安装脚本是有用的,可能是下面的一些目的:
从你的开发/测试环境到你的生成环境使你的站点容易的开发
力所能及的修复数据库
对数据库修改的概述
$this对象在这个类的安装脚本中有声明,我们是在config.xml里面注册定义的。在这个项目里面,它是Mage_Eav_Model_Entity_Setup类,这个类主要用于你想去添加EAV属性到实体中,例如在这里的产品或者分类。主要的所有设置类都继承默认的设置类,在这里是,Mage_Core_Model_Resource_Setup.
如果你想在你的安装脚本中做很多的事情,你可以创建你自己的设置类,这将从普通的设置类中扩展。
在安装程序文件中这个类中声明的函数可以调用这个$this.
在模型中创建一个平面表
在这里,我们将扩展我们的模块和平面数据库表,我们将创建一个升级脚本和创建一个表的指令。当这个表创建,我们将通过添加所需的Magento模型、资源模型和集合来完成设置,我们将在Magento ORM中创建一个自定义Magento实体和所有的特性
准备
在这里,我们将要编码和数据库,打开你的IDE在模块文件夹和访问你的数据库客户端。
怎么做...
下面的步骤是创建一个数据表应用到相关联的Magento模型:
1、在app/code/local/Packt/Helloworld/etc/config.xml中配置表名。
<helloworld_resource> <class>Packt_Helloworld_Model_Resource</class> <entities> <subscription> <table>helloworld_subscription</table> </subscription> </entities> </helloworld_resource>
上面的代码将定义引用helloworld_subscription表的实体
3、创建升级脚本文件app/code/local/Packt/Helloworld/sql/helloworld_setup/upgrade-0.0.1-0.0.2.php
4、添加下面的代码到升级脚本文件,这个代码是创建表及其一些字段的命令
<?php $installer = $this; $installer->startSetup(); $table = $installer->getConnection()->newTable($installer->getTable('helloworld/subscription'))->addColumn('subscription_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array( 'identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true, ), 'Subscription id')->addColumn('created_at', Varien_Db_Ddl_Table:: TYPE_TIMESTAMP, null, array( 'nullable' => false, ), 'Created at')->addColumn('updated_at', Varien_Db_Ddl_Table:: TYPE_TIMESTAMP, null, array( 'nullable' => false, ), 'Updated at')->addColumn('firstname', Varien_Db_Ddl_Table::TYPE_TEXT,64, array( 'nullable' => false, ), 'First name') ->addColumn('lastname', Varien_Db_Ddl_Table::TYPE_TEXT, 64, array( 'nullable' => false, ), 'Last name') ->addColumn('email', Varien_Db_Ddl_Table::TYPE_TEXT, 64, array( 'nullable' => false, ), 'Email address') ->addColumn('status', Varien_Db_Ddl_Table::TYPE_TEXT, 32, array('nullable' => false,'default' => 'pending',), 'Status')->addColumn('message', Varien_Db_Ddl_Table::TYPE_TEXT,'64k', array('unsigned' => true,'nullable' => false,), 'Subscription notes')->addIndex($installer->getIdxName('helloworld/subscription',array('email')),array('email'))->setComment('Helloworld subscriptions'); $installer->getConnection()->createTable($table); $installer->endSetup();
5、清理缓存刷新前台页面,当你刷新你的数据库客户端的表时,你将看到helloworld_subscription表在列表中.

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引优化器工作原理的相关内容,其中包括了MySQL Server的组成,MySQL优化器选择索引额原理以及SQL成本分析,最后通过 select 查询总结整个查询过程,下面一起来看一下,希望对大家有帮助。

sybase是基于客户/服务器体系结构的数据库,是一个开放的、高性能的、可编程的数据库,可使用事件驱动的触发器、多线索化等来提高性能。

visual foxpro数据库文件是管理数据库对象的系统文件。在VFP中,用户数据是存放在“.DBF”表文件中;VFP的数据库文件(“.DBC”)中不存放用户数据,它只起将属于某一数据库的 数据库表与视图、连接、存储过程等关联起来的作用。

数据库系统由4个部分构成:1、数据库,是指长期存储在计算机内的,有组织,可共享的数据的集合;2、硬件,是指构成计算机系统的各种物理设备,包括存储所需的外部设备;3、软件,包括操作系统、数据库管理系统及应用程序;4、人员,包括系统分析员和数据库设计人员、应用程序员(负责编写使用数据库的应用程序)、最终用户(利用接口或查询语言访问数据库)、数据库管理员(负责数据库的总体信息控制)。

数据库的“完整性”是指数据的正确性和相容性。完整性是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。完整性对于数据库系统的重要性:1、数据库完整性约束能够防止合法用户使用数据库时向数据库中添加不合语义的数据;2、合理的数据库完整性设计,能够同时兼顾数据库的完整性和系统的效能;3、完善的数据库完整性有助于尽早发现应用软件的错误。

结构层次是“数据库→数据表→记录→字段”;字段构成记录,记录构成数据表,数据表构成了数据库。数据库是一个完整的数据的记录的整体,一个数据库包含0到N个表,一个表包含0到N个字段,记录是表中的行。

mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题。遇到这种问题,我们一般也会想到是因为索引。那除开索引之外,还有哪些因素会导致数据库查询变慢呢?

go语言可以写数据库。Go语言和其他语言不同的地方是,Go官方没有提供数据库驱动,而是编写了开发数据库驱动的标准接口,开发者可以根据定义的接口来开发相应的数据库驱动;这样做的好处在于,只要是按照标准接口开发的代码,以后迁移数据库时,不需要做任何修改,极大方便了后期的架构调整。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver Mac版
视觉化网页开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。