Magento 1.8 Development 第六章:数据库和模块
在这一章,我们将学习一下内容: 注册资源模型 注册资源连接 安装和升级脚本 创建一个单一的表模型 使用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>
它是如何工作的
每一个模型在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>
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表在列表中.

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

Go 言語は、効率的かつ簡潔で習得が容易なプログラミング言語であり、同時プログラミングやネットワーク プログラミングに優れているため、開発者に好まれています。実際の開発ではデータベースの操作が欠かせませんが、今回はGo言語を使ってデータベースの追加・削除・変更・クエリ操作を実装する方法を紹介します。 Go 言語では、データベースを操作するために通常、よく使用される SQL パッケージや gorm などのサードパーティ ライブラリを使用します。ここでは SQL パッケージを例として、データベースの追加、削除、変更、クエリ操作を実装する方法を紹介します。 MySQL データベースを使用していると仮定します。

Hibernate ポリモーフィック マッピングは、継承されたクラスをデータベースにマップでき、次のマッピング タイプを提供します。 join-subclass: 親クラスのすべての列を含む、サブクラス用の別個のテーブルを作成します。 table-per-class: サブクラス固有の列のみを含む、サブクラス用の別個のテーブルを作成します。 Union-subclass: join-subclass と似ていますが、親クラス テーブルがすべてのサブクラス列を結合します。

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

HTML はデータベースを直接読み取ることはできませんが、JavaScript と AJAX を通じて実現できます。この手順には、データベース接続の確立、クエリの送信、応答の処理、ページの更新が含まれます。この記事では、JavaScript、AJAX、および PHP を使用して MySQL データベースからデータを読み取る実践的な例を示し、クエリ結果を HTML ページに動的に表示する方法を示します。この例では、XMLHttpRequest を使用してデータベース接続を確立し、クエリを送信して応答を処理することで、ページ要素にデータを埋め込み、データベースを読み取る HTML の機能を実現します。

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

PHP でデータベース接続エラーを処理するには、次の手順を使用できます。 mysqli_connect_errno() を使用してエラー コードを取得します。 mysqli_connect_error() を使用してエラー メッセージを取得します。これらのエラー メッセージをキャプチャしてログに記録することで、データベース接続の問題を簡単に特定して解決でき、アプリケーションをスムーズに実行できるようになります。

PHP は Web サイト開発で広く使用されているバックエンド プログラミング言語であり、強力なデータベース操作機能を備えており、MySQL などのデータベースとの対話によく使用されます。ただし、中国語の文字エンコーディングは複雑であるため、データベース内で中国語の文字化けを処理するときに問題が発生することがよくあります。この記事では、文字化けの一般的な原因、解決策、具体的なコード例を含め、データベース内の中国語の文字化けを処理するための PHP のスキルと実践方法を紹介します。文字化けの一般的な原因は、データベースの文字セット設定が正しくないことです。データベースの作成時に、utf8 や u などの正しい文字セットを選択する必要があります。

MySQL データベース管理システムの基本原理の分析 MySQL は、データの保存と管理に構造化照会言語 (SQL) を使用する、一般的に使用されるリレーショナル データベース管理システムです。この記事では、データベースの作成、データ テーブルの設計、データの追加、削除、変更などの操作を含む、MySQL データベース管理システムの基本原理を紹介し、具体的なコード例を示します。 1. データベースの作成 MySQL では、まずデータを保存するデータベース インスタンスを作成する必要があります。次のコードは、「my」という名前のファイルを作成できます。
