#phalcon-入门篇7(Model层基础使用)#php
本教程基于phalcon2.0.9版本mysql
##前言## 先在这里感谢各位phalcon技术爱好者,咱们提供这样一个优秀的交流平台git
离上一次更新已经有一段时间了,主要是最近工做比较繁忙,在就是phalcon的model层确实是一块难吭的骨头,这边打算分红多个小节对model从浅到深进行了解,对于一些深刻的功能将会放到比较后面的章节结合例子进行说明,那么开始今天的吗model初体验之旅sql
注:笔者水平有限,说的不正确的地方但愿你们多多指正,一同交流技术数据库
附上:数组
喵了个咪的博客:http://w-blog.cnapp
教程代码库:http://git.oschina.net/wenzhenxi/Phalcon-tutorialide
phalcon官网地址:https://phalconphp.com函数
phalcon中文社区:http://www.iphalcon.cn/.net
##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. 小结##
本小节主要讲了最最基础的数据操做,在下一节会更深刻的进行平常会用到的更多的数据操做进行举例演示,那么咱们今天的教程就到这里,谢谢你们的支持!
注:笔者能力有限有说的不对的地方但愿你们可以指出,也但愿多多交流!
Phalcon技术交流:364520707 PhalCon中文社区:287484785 欢迎你们的加入!