phalcon-入门篇7(Model层基础使用)
本教程基于phalcon2.0.9版本
前言
先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台
离上一次更新已经有一段时间了,主要是最近工作比较繁忙,在就是phalcon的model层确实是一块难吭的骨头,这边打算分成多个小节对model从浅到深进行了解,对于一些深入的功能将会放到比较后面的章节结合例子进行说明,那么开始今天的吗model初体验之旅
注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术
附上:
喵了个咪的博客:http://w-blog.cn
教程代码库:http://git.oschina.net/wenzhenxi/Phalcon-tutorial
phalcon官网地址:https://phalconphp.com
phalcon中文社区:http://www.iphalcon.cn/
1. 准备工作
phalcon提供了抽象的数据库操作类,可以对Mysql,Oracle,Postgresql,Sqlite进行使用.
注意:phalcon当前DB类不支持mssql
首先你需要有一个Mysql数据库,这里就不多说了,然后大家还记得我们使用的配置文件吗?我们在ini.ini中加入如下配置项:
[database]
adapter = Mysql
host = 127.0.0.7
username = root
password =
dbname = phalcon
我们紧接着在mysql中建立一个名为phalcon的库,然后在里面执行如下语句建立user库:
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`phone` varchar(11) DEFAULT NULL,
`passwd` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
当我我们要需要把数据库实例化以便后续的使用,我们在index.php加入如下语句:
use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;
// 初始化数据库连接 从配置项读取配置信息
$di->set('db', function () use ($ConfigIni) {
return new DbAdapter(array(
"host" => $ConfigIni->database->host,
"username" => $ConfigIni->database->username,
"password" => $ConfigIni->database->password,
"dbname" => $ConfigIni->database->dbname
));
});
最后一步建立我们的model文件目录(在app下面)并且进行自动加载设置:
$loader->registerDirs(array(
// 控制器所在目录
'../app/controllers/',
//model所在目录
'../app/models/',
))->register();
那么到这里准备工作也就完成了
2. 基本CURD
当然和往常一样我们建立BasemodelController控制器提供我们今天的教程代码
midel的约定是必须建立一个表对象是的实例,我们在app/model下面建立User.php文件加入如下代码:
use Phalcon\Mvc\Model;
class User extends Model {
//我们可以建立一些类的公共变量,变量对应表的字段
public $id;
public $name;
public $phone;
public $passwd;
}
注意:必须继承基础Model类
2.1 插入数据
我们在BasemodelController下面建立insertAction方法:
public function insertAction() {
$User = new User();
//设置需要写入的数据
//如果在model里面没有设置公共变量,对这边的使用也没有影响但是对IDE有良好的提示功能
$User->name = "phalcon";
$User->phone = "13011111111";
$User->passwd = "passwd";
//执行操作
$ret = $User->save();
//对结果进行验证
if ($ret) {
echo "写入数据成功";
} else {
//如果插入失败处理打印报错信息
echo "写入数据库失败了";
foreach ($User->getMessages() as $message) {
echo $message->getMessage(), "<br/>";
}
}
echo '<h1>BasemodelController/select!</h1>';
}
我们试着运行一下控制器:
http://phalcon.w-blog.cn/phalcon/BaseModel/insert
这个时候我们去数据库里面查询一下user表就能看到我们想要插入的数据了:
2.2 查询
phalcon非常贴心的给我们提供了很多方便的操作函数来进行快捷的查询操作比如下面要说道的静态方法find,我们建立一个方法来试试:
public function selectAction() {
$rs = User::find(1);
var_dump($rs->toArray());
echo '<h1>BasemodelController/select!</h1>';
}
find函数是获取主键id等于传参的那一行数据,这里要注意phalcon所有的查询之后返回的都是一个对象,需要转换成数组需要使用toArray函数,结果如下:
这样就很简单的查询出了我们想要的数据,当然查询远不止如此,在这里对简单的操作进行一个举例大家可以手动尝试一下:
//查询出所有的记录
$rs = User::find();
var_dump($rs->toArray());
echo '</br>';
echo '</br>';
//通过where条件进行查询匹配的
$rs = User::find("name = 'phalcon'");
echo "名称为'phalcon的用户有'", count($rs), "个\n</br>";
echo '</br>';
// 获取名称为phalcon的用户并且通过phone排序
$rs = User::find(array(
"name = 'phalcon'",
"order" => "phone"
));
foreach ($rs as $user) {
echo $user->name, "\n";
echo $user->phone, "\n";
echo '</br>';
}
echo '</br>';
// 获取通过name排序的前100条数据
$rs = User::find(array(
"order" => "name",
"limit" => 100
));
foreach ($rs as $user) {
echo $user->name, "\n";
echo '</br>';
}
//通过findFirst可以获取第一条符合查询条件的结果 可以和find一样加入条件
$rs = User::findFirst();
echo "第一个用户的名称为 ", $rs->name, "\n";
结果如下:
2.3 改
phlacon提供的修改方式有两种,一种是直接修改通过自己指定ID和需要修改的值比如:
public function updateAction() {
$User = new User();
$User->id = 1;
$User->name = "test";
//执行操作
$ret = $User->save();
//对结果进行验证
if ($ret) {
echo "修改数据成功";
} else {
//如果插入失败处理打印报错信息
echo "修改数据库失败了";
foreach ($User->getMessages() as $message) {
echo $message->getMessage(), "<br/>";
}
}
}
但是这样会有个问题其他参数都是默认的null会被覆盖掉,不然就要对所有的参数重新赋值,
还有一种方式就是先查询然后在修改,上面有说过phalcon查询出来的都是返回对象形式,这样也是优势如下
$User = User::findFirst(1);
$User->phone = "13111111111";
//执行操作
$ret = $User->save();
这里不能使用find查询,我们就值蛋蛋改变了ID为1的phone值:
2.4 删除
删除其实可以不用多说,操作很简单
public function deleteAction() {
$User = new User();
$User->id = 1;
//执行操作
$ret = $User->delete();
//对结果进行验证
if ($ret) {
echo "删除数据成功";
} else {
//如果插入失败处理打印报错信息
echo "删除数据库失败了";
foreach ($User->getMessages() as $message) {
echo $message->getMessage(), "<br/>";
}
}
}
这样ID为1的数据就已经被删除掉了
3. 小结
本小节主要讲了最最基础的数据操作,在下一节会更深入的进行日常会用到的更多的数据操作进行举例演示,那么我们今天的教程就到这里,谢谢大家的支持!
注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!