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

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

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

时间: 2024-12-09 21:21:56

phalcon-入门篇7(Model层基础使用)的相关文章

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

phalcon-入门篇8(Model层基础使用2) 本教程基于phalcon2.0.9版本 前言 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 在上一节我们已经介绍了,phalcon-Model层的配置和最简单的CURD的使用,那么你认为这样就完了?phalcon当然不会让你失望,今天跟着笔者一同来看phalcon还有那些新奇的使用方式,在上一篇我们仅仅只是建立了一个空的model层,这里今天也会对model的简单使用封装,函数今天一些说明,希望大家喜欢~ 注:笔者水

phalcon-入门篇9(view层基础使用)

phalcon-入门篇9(view层基础使用) 本教程基于phalcon2.0.9版本 前言 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 哈喽大家好呀,期待已久的第9篇终于和大家见面了,时隔半个多月在之间小编对编写phalcon的语言zephir进行了文档译文讲解以及在忙这工作上的一系列事情所以在这里给大家道个歉迟来了这么久,那么今天的主要类容是简单的介绍一下基本的view层在phalcon中要如何的运用,话不多说让我们开始今天的旅程把! 注:笔者水平有限,说的不正

Flash动画基础教程①入门篇

flash动画|基础教程 這個教程是本人的一些經驗之談,為了初學者的入門教程,未經本人許可請勿轉載!謝謝 Flash动画基础教程--入门篇①首先我们来说说什么是Flash? Flash是Macromedia公司出品的软件,对于Flash是什么很多的描述,大致是"交互性矢量多媒体制作软件"的意思!首先,它是一种多媒体制作软件,Flash的产品往往都是一些"有声有色"给人视觉冲击的动画.其次,Flash是以矢量图为基础的,矢量图最大的特点就是它能无限的缩放,不会因为图像

phalapi-入门篇5(数据库操作和Model层)

phalapi-入门篇5(数据库操作和Model层) 前言 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 本小节主要讲解基于notorm的数据库操作以及使用Model层进行快速的数据层的开发,请确保装有PDO拓展. 附上: 官网地址:http://www.phalapi.net/ 开源中国Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release 1. 基于PDO的notorm进行的数据库操作

《Ansible权威指南 》一 第一篇 Part 1 基础入门篇

第一篇 Part 1 基础入门篇第1章 Ansible基础入门第2章 Ansible基础元素介绍第3章 Ansible Ad-Hoc命令集第4章 Playbook快速入门第5章 Ansible Playbook拓展 第1章 Ansible基础入门 "未来主体是传统行业利用互联网技术,以云端用人工智能的方式处理大数据",在腾讯"云+未来"技术峰会上,马化腾这样形容未来.15年前,电脑还只是少数人的专属,那时的网吧还很火,还没人知道"网咖"是什么.而

Phalcon入门教程之模型

原文发表于: Phalcon入门教程之模型 Phalcon 提供了四种方式操作Mysql数据库:模型.PHQL.数据库抽象层以及原生SQL.不论何种方式,首先都需要在DI中注册 db 服务才能正常使用: DI注册db服务 // 文件路径:app/core/services.php $di -> setShared('db', function () use($config) { $dbconfig = $config -> database -> db; $dbconfig = $dbc

Phalcon入门教程之模型CURD(1)

原文发表于:Phalcon入门教程之模型CURD(1) 上一篇<Phalcon入门教程之模型>中介绍了数据库模型操作的一些基础功能,本篇将介绍模型的 select 和 insert 用法.由于数据库模型操作的内容比较多和细,所以本篇只是粗略的介绍基础用法,以及补充文档中没有提及的一些用法和注意点.因此,强烈建议大家在熟读文档的前提下,再阅读此篇教程. 数据表 假设数据表名为 test_articles,数据结构及记录下: mysql> select * from test_article

Phalcon入门教程之模型CURD(2)

原文发表于:Phalcon入门教程之模型CURD(2) 上一篇 Phalcon入门教程之模型CURD(1) 中介绍了 Phalcon 模型的 insert 和 select 操作,本篇将介绍 update 和 delete 的用法.文中所用的示例代码皆沿用上一篇的数据表,这里不在赘述. 更新记录 Phalcon 模型更新记录的示例代码如下: $articleModel = new ArticlesModel(); //先调用 findFirst() 获取一条记录,返回值是当前模型对象 $arti

资源编排最佳实践之入门篇:云服务器如何从1到N?

随着云计算的应用和普及,IaaS层.SaaS层.PaaS层的服务也不断涌现,而国内云端的自动化运维还属于初探阶段.阿里云资源编排(Resource Orchestration,以下简称ROS)服务即是填补了这部分空缺. ROS的理念是"基础设施即代码",一方面是用代码思维的版本管理来记录基础设施的变化,另一方面我们都知道计算机世界用代码实现了各种系统.无所不能,ROS秉承这样的理念,通过代码实现自动化运维,并且简化编写代码的复杂度,只需通过模板描述多个云计算资源的依赖关系.配置等. 通