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

#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 欢迎大家的加入!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信公众号:Java团长

彻底解决MySQL中文乱码

mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。

2082
来自专栏青玉伏案

Swift3.0服务端开发(五) 记事本的开发(iOS端+服务端)

前边以及陆陆续续的介绍了使用Swift3.0开发的服务端应用程序的Perfect框架。本篇博客就做一个阶段性的总结,做一个完整的实例,其实这个实例在《Swift...

2307
来自专栏Java技术分享

高并发分布式系统中生成全局唯一Id汇总

数据在分片时,典型的是分库分表,就有一个全局ID生成的问题。 单纯的生成全局ID并不是什么难题,但是生成的ID通常要满足分片的一些要求:    1 不能有单点故...

3115
来自专栏nnngu

Hibernate的关联映射

首先我们了解一个名词ORM,全称是(Object Relational Mapping),即对象关系映射。ORM的实现思想就是将关系型数据库中表的数据映射成对象...

2905
来自专栏IT可乐

mybatis 详解(八)------ 懒加载

  本章我们讲如何通过懒加载来提高mybatis的查询效率。   本章所有代码:http://pan.baidu.com/s/1o8p2Drs 密码:trd6 ...

3549
来自专栏FreeBuf

利用SQLite数据库文件实现任意代码执行

前言 近期,我们对贝尔金WeMo智能家居设备的安全性进行了分析。在研究过程中,我们开发出了一种新型的SQL注入技术,这项技术针对的是SQLite数据库。实验表明...

24610
来自专栏智能大石头

充血模型的ORM能做什么?——ORM组件XCode(十八般武艺)

ORM组件XCode(十八般武艺) 之前,XCode总是若隐若现,耐性好的同学想知道它还有啥特点,沉不住气的则认为不过是CURD耳! XCode开发模式是灵魂,...

1979
来自专栏社区的朋友们

MongoDb 简单介绍

最近一段时间使用 mongodb 做媒资数据的接入,简单介绍一下 mongodb 的特性和语法。希望对大家有所帮助。

1500
来自专栏小樱的经验随笔

BugkuCTF SQL注入1

1784
来自专栏Java架构沉思录

如何优雅地实现分页查询

分页功能是很常见的功能,特别是当数据量越来越大的时候,分页查询是必不可少的。实现分页功能有很多种方式,如果使用的ORM框架是mybatis的话,有开源的分页插件...

1422

扫码关注云+社区

领取腾讯云代金券