如何创建一个MVC模式的Joomla组件教程(八) 使用数据库 上
序言
前两个例子展示了如何创建简单的MVC组件,在第二个例子中view获取从model中返回的数据。本教程中,我们继续关注model,我们将直接从数据库获得数据,而不是直接写在model中。我们将演示如何利用JDatbase从数据库中取得数据
取得数据
第二个例子中只有一个方法getGreeting(),这个方法所做的仅仅是返回写在代码中的greeting.
稍后将演示如何创建sql文件,并加入到xml安装文件中,从而在安装的时候自动创建数据表,加入初始的样板数据。现在我们将演示的是用什么代码替换就可以从数据库获得合适的数据。
首先要获得数据库的引用,你这样做就可以了得到了
$db =& JFactory::getDBO();
JFactory 是一个静态类,通过它可以取得很多的实例(请参见源代码解析,JFactory类).
getDBO就是 get DataBase Object 的缩写, 很容易记住吧
接下来我们取回数据吧,这需要两步,一是存储query,一是载入结果
以下是getGreeting的代码
function getGreeting()
{
$db =& JFactory::getDBO();
$query = 'SELECT greeting FROM #__hello';
$db->setQuery( $query );
$greeting = $db->loadResult();
return $greeting;
}
hello是我们以后要创建的表名,greeting是存储数据的字段名。如果你不熟悉sql,最好找个教程手册速成一下,可以在w3schools找到这样的教程。
$db->loadResult()执行查询,返回结果集中第一行的第一个字段. .
创建sql文件
joomla installer支持执行sql,这些sql语句都保存在标准的文本文件中。在安装文件有三个语句,一个如果表已经存在那么就删除,第二个是创建表,第三是插入样例数据。
以下是全部文本:
DROP TABLE IF EXISTS `#__hello`;
CREATE TABLE `#__hello` (
`id` int(11) NOT NULL auto_increment,
`greeting` varchar(25) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT DEFAULT CHARSET=utf8;
INSERT INTO `#__hello` (`greeting`) VALUES ('Hello, World!'),
('Bonjour, Monde!'),
('Ciao, Mondo!');