[精通Joomla开发]核心数据库之六JTable使用

本文详细介绍了如何在Joomla中使用JTable类来操作数据库表,包括创建子类、定义构造函数及验证方法等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Joomla提供给我们功能强大的JTable抽象类,使用这个类我们可以进行一些数据库的基本功能操作。对于每个我们想要使用JTable类来操作的表,我们都需要创建一个JTable的子类。

当创建JTable子类的时候,我们需要遵循一些具体的约定或者规则。这些规则方便我们很容易的将我们自己的扩展集成到Joomla或者Joomla框架中。

假如我们创建一个组件,我们需要在该组件的后台管理目录(administrator/components/该组件目录)下的tables目录里创建一个JTable子类.类名就是数据库表实体名加上Table,而类文件的名称就是数据库表实体名。(如果还不清楚翻开他的核心组件比如com_contact自己仔细看

我们将使用我们之前教程中定义的表结构来演示我们是如何通过JTable类来连接数据库表的。在我们继续之前你得熟悉一下http://www.joomlar.cn/website/content/view/178/1/文章中介绍的数据库表结构

类名是TableFoobar,定位在 JPATH_COMPONENT_ADMINISTRATOR.DS.'tables'.DS.'foobar.php'文件中,DS这里是一个全局变量 替换了符号“/”,我们首先要做的就是在我们的类文件中定义公共属性或者说是公有变量,这些公共属性与数据库字段(field)直接相关,必须使用相同的 名字。我们使用这些公有变量作为一个缓冲区(buffer)来存储个别数据。(理解起来有点困难,可以这样理解数据库的数据会直接拿来填充这些公有变量,我们操作也是操作这些公有变量,如何影响到数据库是靠JTable一些内部的机制

第二件事情就是我们要定义一个构造函数,为了使用JTable::getInstance()方法,我们需要在我们的子类中使用一个单例引用的数据库对象来覆写基类的构造函数

第三件事情就是我们要覆写check()方法,该方法提供了对属性缓冲区的验证检查并返回一个布尔值结果,如果check()失败,我们就要调用setError()来设置一段消息来提示为什么验证检查失败了。

/**
* #__myextenstion_foobars table handler
*
*/
class TableFoobar extends JTable
{
/** @var int Primary key */
var $id = null;
/** @var string Content */
var $content = null;
/** @var int Checked-out owner */
var $checked_out = null;
/** @var string Checked-out time */
var $checked_out_time = null;
/** @var string Parameters */
var $params = null;
/** @var int Order position */
var $ordering = null;
/** @var int Number of views */
var $hits = null;
/**
* Constructor
*
* @param database Database object
*/
function __construct( &$db )
{
parent::__construct('#__myextension_foobars', 'id', $db);
}
/**
* Validation
*
* @return boolean True if buffer is valid
*/
function check()
{
if(!$this->content)
{
$this->setError(JText::_('Your Foobar must contain some
content'));
return false;
}
return true;

}

}


上面就是一个完整的JTable类文件,接下去我们要做什么,很明显我们要实例化这个对象,使用静态化方法JTable::getInstance(),完整代码如下:

JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.DS.'tables');
$table = JTable::getInstance('foobar', 'Table');



我们没有直接去包含一个文件,而是包含了整个tables目录,但JTable要去实例化TableFoobar对象的时候,如果类没有定义它就会从包含路径的所有文件中寻找名为foobar.php的文件

本节讲述JTable文件的构成使用,下节介绍CRUD自动化操作当然是基于JTable的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值