文档章节

phalcon-入门篇7(Model层基础使用)

喵了_个咪
 喵了_个咪
发布于 2016/02/27 10:05
字数 1739
阅读 679
收藏 1

#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. 小结##

本小节主要讲了最最基础的数据操作,在下一节会更深入的进行日常会用到的更多的数据操作进行举例演示,那么我们今天的教程就到这里,谢谢大家的支持!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

Phalcon技术交流:364520707 PhalCon中文社区:287484785 欢迎大家的加入!

© 著作权归作者所有

喵了_个咪
粉丝 336
博文 165
码字总数 214149
作品 4
杨浦
技术主管
私信 提问
加载中

评论(3)

qqyu
qqyu

引用来自“qqyu”的评论

我在使用phalcon3.1.12版本,用find和findFrist获取数据时,除了数据库数据,一些其他的phalcon配置信息也在结果集里面,而你写的这个只有干干净净的数据库数据,请问这个是怎么处理的?还是说有地方设置这个配置?

引用来自“喵了_个咪”的评论

我这段教程是基于 phalcon2.0.9 phalcon以及更新3.1.x 了相对于原来还是有挺多区别的 可能会有比较多的差异 还是以官方文档为准
官方文档看了,写的和你的一样,但是结果他们并没有列出来,我用tools生成的代码发现也有这个问题,只不过他们没去管这部分数据,只管拿自己要的去用,总感觉这样做并不合理,所以这个问题再寻求其他解决方案。再问一个问题,在service.php中注册了db服务后,返回的这个connect,如何在model中使用呢,我看官方的是用的parent,而举例子使用connect却又去初始化了一遍数据库连接,按理来说应该可以直接使用service中的吧
喵了_个咪
喵了_个咪 博主

引用来自“qqyu”的评论

我在使用phalcon3.1.12版本,用find和findFrist获取数据时,除了数据库数据,一些其他的phalcon配置信息也在结果集里面,而你写的这个只有干干净净的数据库数据,请问这个是怎么处理的?还是说有地方设置这个配置?
我这段教程是基于 phalcon2.0.9 phalcon以及更新3.1.x 了相对于原来还是有挺多区别的 可能会有比较多的差异 还是以官方文档为准
qqyu
qqyu
我在使用phalcon3.1.12版本,用find和findFrist获取数据时,除了数据库数据,一些其他的phalcon配置信息也在结果集里面,而你写的这个只有干干净净的数据库数据,请问这个是怎么处理的?还是说有地方设置这个配置?
phalcon-入门篇8(Model层基础使用2)

本教程基于phalcon2.0.9版本 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 在上一节我们已经介绍了,phalcon-Model层的配置和最简单的CURD的使用,那么你认为这样就完了...

喵了_个咪
2016/03/01
863
3
phalcon-入门篇9(view层基础使用)

本教程基于phalcon2.0.9版本 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 哈喽大家好呀,期待已久的第9篇终于和大家见面了,时隔半个多月在之间小编对编写phalcon的语言...

喵了_个咪
2016/03/26
713
4
phalcon-入门篇2(HelloWord与PhalconTools)

本教程基于phalcon2.0.9版本 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 最近刚好趁着春节放假前几天摸鱼的时间为大家带来今天的phalcon教程,今天教程的内容只要是把...

喵了_个咪
2016/02/01
1K
0
phalcon-入门篇1(基本介绍与环境搭建)

本教程基于phalcon2.0.9版本 *先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 * 离结束了PhalApi教程之后一个多月,我喵了个咪又回来了,这次为大家带来的教程是一款国外的...

喵了_个咪
2016/01/24
1K
2
phalcon-入门篇3(优美的URL与Config)

本教程基于phalcon2.0.9版本 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 优美的URL不论实在MVC开发中还是API开发中都是很重要的,它是一套规范能够帮助记忆,虽然pha...

喵了_个咪
2016/02/02
9K
16

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
7
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
7
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
9
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部