JTable类是Active Record设计模式(web应用中应用最为广泛,最为简单的数据库相关的设计模式,笔者)的实现。JTable在joomla与数据库交互过程中广泛的使用。要使用JTable,首先要创建一个JTable的子类。下面是我们的一个例子:
defined('_JEXEC') or die();
class TableRecipes extends JTable
{
var $id = null;
var $ingredients = null;
var $instructions = null;
var $serves = null;
var $difficulty = null;
var $prep_time = null;
var $cook_time = null;
var $published = 0;
function __construct(&$db)
{
parent::__construct( '#__recipes', 'id', $db );
}
}
JTable的子类命名前缀是Table,然后就是首字母大写的表名,类中的成员变量对应着数据库中的字段名,默认值与表中的字段默认值应该相同。加入字段默认是NOT NULL,那就不能采用 'null'作为成员变量的默认值。
最后是类的构造器,构造器的参数是当前数据库的引用,子类的构造器调用JTable的构造器,父类的构造器有三个输入参数,第一个参数是表名,第二个是主键,第三个是当前数据库的链接。加入以上的类应用在Recipes组件上,那么代码应该放在/administrator/components /com_recipes/tables/recipes.php.文件中。
如何使用JTable扩展
为了使用JTable扩展,要首先在组件的代码中引入,下面一行是引入代码:
JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_recipes'.DS.'tables');
用下面的代码,可以获得JTable 扩展类的对象。
$row =& JTable::getInstance('recipes', 'Table');
请注意全小写的类名作为第一个参数,而 'Table'作为第二个参数,getInstance函数返回JTable的引用。
在model类(组件的JModel扩展)中可以可以采用以下代码获得JTable扩展的实例。
$row =& $this->getTable('recipes');
添加和更新数据记录
通常情况下,用户在客户端通过html form提交数据,而JRequest可以协助获得这些数据,用JRequest::get('post')可以获得 HTTP POST 方式提交的数组,获得的数组可以传递给bind函数。bind函数将post中对应内容自动绑定到相应名称的成员变量,请看下面的例子:
if (!$row->bind( JRequest::get( 'post' ) )) {
return JError::raiseWarning( 500, $row->getError() );
}
注意上面代码中的 JError::raiseWarning,JError::raiseWarning在bind方法出错的时候停止执行,getError()可以得到 JTable对象bind出错的返回信息。如果绑定成功,接下来调用store()函数。
if (!$row->store()) {
JError::raiseError(500, $row->getError() );
}
如果 JTable对象的任何成员变量为空,这些变量被默认忽略,这样可以更新指定字段,如果需要每个字段都有值,可以在store()函数中加上参数 'true',bind函数不检查数据类型,如果你要保证数据完整性,请在保存数据前程序代码中检查一下。
JTable读取数据
如果要用JTable加载表中指定一行,传递主键给load成员函数。以下是代码:
$row->load( $id );
JTable 删除数据
下面是代码是删除例子,删除指定的数据,要用delete函数。
$row->delete( $id );
如果要一次删除多行数据,你需要手动写query语句。
defined('_JEXEC') or die();
class TableRecipes extends JTable
{
var $id = null;
var $ingredients = null;
var $instructions = null;
var $serves = null;
var $difficulty = null;
var $prep_time = null;
var $cook_time = null;
var $published = 0;
function __construct(&$db)
{
parent::__construct( '#__recipes', 'id', $db );
}
}
JTable的子类命名前缀是Table,然后就是首字母大写的表名,类中的成员变量对应着数据库中的字段名,默认值与表中的字段默认值应该相同。加入字段默认是NOT NULL,那就不能采用 'null'作为成员变量的默认值。
最后是类的构造器,构造器的参数是当前数据库的引用,子类的构造器调用JTable的构造器,父类的构造器有三个输入参数,第一个参数是表名,第二个是主键,第三个是当前数据库的链接。加入以上的类应用在Recipes组件上,那么代码应该放在/administrator/components /com_recipes/tables/recipes.php.文件中。
如何使用JTable扩展
为了使用JTable扩展,要首先在组件的代码中引入,下面一行是引入代码:
JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_recipes'.DS.'tables');
用下面的代码,可以获得JTable 扩展类的对象。
$row =& JTable::getInstance('recipes', 'Table');
请注意全小写的类名作为第一个参数,而 'Table'作为第二个参数,getInstance函数返回JTable的引用。
在model类(组件的JModel扩展)中可以可以采用以下代码获得JTable扩展的实例。
$row =& $this->getTable('recipes');
添加和更新数据记录
通常情况下,用户在客户端通过html form提交数据,而JRequest可以协助获得这些数据,用JRequest::get('post')可以获得 HTTP POST 方式提交的数组,获得的数组可以传递给bind函数。bind函数将post中对应内容自动绑定到相应名称的成员变量,请看下面的例子:
if (!$row->bind( JRequest::get( 'post' ) )) {
return JError::raiseWarning( 500, $row->getError() );
}
注意上面代码中的 JError::raiseWarning,JError::raiseWarning在bind方法出错的时候停止执行,getError()可以得到 JTable对象bind出错的返回信息。如果绑定成功,接下来调用store()函数。
if (!$row->store()) {
JError::raiseError(500, $row->getError() );
}
如果 JTable对象的任何成员变量为空,这些变量被默认忽略,这样可以更新指定字段,如果需要每个字段都有值,可以在store()函数中加上参数 'true',bind函数不检查数据类型,如果你要保证数据完整性,请在保存数据前程序代码中检查一下。
JTable读取数据
如果要用JTable加载表中指定一行,传递主键给load成员函数。以下是代码:
$row->load( $id );
JTable 删除数据
下面是代码是删除例子,删除指定的数据,要用delete函数。
$row->delete( $id );
如果要一次删除多行数据,你需要手动写query语句。
发表评论
-
joomla 模块modules开发教程
2010-05-12 14:16 2807模块是页面扩展轻量级方式,相对组件更为灵活。模块通常用来做页面 ... -
joomla 1.5——JDocument类用法
2010-04-22 14:46 1398文档类,提供一个容易 ... -
[翻译] Joomla XML 解析器规范 上
2010-04-22 14:45 1081概述 Joomla! 1.5 新增 JSimpleXML 类 ... -
Joomla插件开发规范
2010-04-22 14:44 1412概述:JPlugin Joomla 1.5的新功能 为了更好 ... -
joomla源代码探析续(三十一) JHTML 类常用的方法
2010-04-22 14:37 1741我曾经在几篇文章中涉及到JHTML的方法使用,这里不再说了,请 ... -
joomla源代码探析续(三十) JDate类参考
2010-04-22 14:36 1085JDate类与JString类一样是Joomla!中的基础类, ... -
joomla源代码探析续(二十九) JHTML 与JHTMLSelect 类的使用
2010-04-22 14:33 1207我们在form表单生成的过程中,经常需要有select 标签或 ... -
joomla源代码探析续(二十七)组件后台如何设置参数
2010-04-22 14:29 928以下的方法可以在管理后台中添加一个Parameters设置的按 ... -
joomla源代码探析续(二十六)JUser对象和用户权限判断
2010-04-22 14:23 1865每一个访问Joomla网站的用户都对应这一个JUser对象,通 ... -
joomla源代码探析续(二十五)JRequest对象的变量获取过程
2010-04-22 14:22 1189Joomla 1.5 RC3版本的SEF存在不少问题,前段时间 ... -
joomla源代码探析续(二十四)JPagination类
2010-04-22 14:22 1127JPagination类是Joomla的通用分页功能的封装类, ... -
Joomla源代码解析(二十二) 模块是如何被调用执行并渲染(下)
2010-04-22 14:16 955上一文章中提到了getBuffer函数,在函数中实际上调用了r ... -
模块是如何被调用执行并渲染?
2010-04-22 14:12 856以前的文章中,关于/index.php我们已经分析完了 $ma ... -
Joomla源代码解析(二十) MVC组件的执行
2010-04-22 14:10 932以前的文章中,我们曾经说过 $mainframework-&g ... -
Joomla源代码解析(十九) JController
2010-04-22 14:05 896同样 JController 是MVC中重要的起点,正式这个类 ... -
Joomla源代码解析(十八) Jview
2010-04-22 14:03 976MVC模式中,重要的一环,JView 和 tmpl目录中的模板 ... -
Joomla源代码解析(十六) JTable是什么 不指定
2010-04-22 14:01 1463JTable是什么? JTable是数据库中数据表在程序中的表 ... -
Joomla源代码解析(十五) 组件是如何被调用并渲染的
2010-04-22 14:00 1445Joomla代码中, 组件是如 ... -
Joomla源代码解析(十四) JRequest类 不指定
2010-04-22 13:58 867这是另一个Joomla扩展中最常用的类,这个类封装了客户端提交 ... -
Joomla源代码解析(十三) JText类
2010-04-22 11:25 1226Joomla 最常用的类之一,使用方式JTEXT::_('JJ ...
评论