`
xieye
  • 浏览: 835058 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

phalcon数据库DB使用实例

阅读更多
整理了一下phalcon的db使用,写了个demo。

 $connection=$this->getDI()->get('db');

        // 特别注意,此表名必须自己手动添加表前缀,也就是这里写完整表名!!
        // 注意点2,这里返回一般都是数组。
        echo "<h1>循环打印,query,然后fetch,此时也能直接得到所有行数。</h1>";
        echo <<<html
<pre>
        \$connection=\$this->getDI()->get('db');
        \$sql = 'SELECT id, name FROM temp ORDER BY name limit 10 ';
        // 将SQL语句发送到数据库系统
        \$result = \$connection->query(\$sql);
        // 打印每个 robot name
        while (\$robot = \$result->fetch()) {
            echo \$robot['name'];
        }
        echo ",总记录数". \$result->numRows() ;
</pre>        
html;

        $sql = 'SELECT id, name FROM temp ORDER BY name limit 10 ';

        // 将SQL语句发送到数据库系统
        $result = $connection->query($sql);
        while ($robot = $result->fetch()) {
            echo $robot['name'];

        }
        echo ",总记录数". $result->numRows() ;
        echo "<hr>";



        // 获取数组中的所有行
        echo "<h1>直接获取所有行,最简单直白一步到位,fetchAll方法</h1>";
        echo <<<html
        <pre>
        \$sql = 'SELECT id, name FROM temp ORDER BY name limit 10 ';
        \$robots = \$connection->fetchAll(\$sql);
        foreach (\$robots as \$robot) {
            echo \$robot['name'];
        }
</pre>
html;

        $robots = $connection->fetchAll($sql);
        foreach ($robots as $robot) {
            echo $robot['name'];
        }
        echo "<hr>";

        // 只获得第一行
        echo "<h1>直接获取第一行,fetchOne方法</h1>";
        echo <<<html
        <pre>
        \$sql = 'SELECT id, name FROM temp ORDER BY name limit 10 ';
        \$robot = \$connection->fetchOne(\$sql);
        echo \$robot['name'];
</pre>
html;
        $robot = $connection->fetchOne($sql);
        echo $robot['name'];
        echo "<hr>";

        echo "<h1>select查询,占位符第一种,纯问号,最最简单</h1>";
        echo <<<html
<pre>
        \$sql    = 'SELECT * FROM temp WHERE name = ? ORDER BY name';
        \$result = \$connection->query(
            \$sql,
            [
                'x11',
            ]
        );
        echo "总记录数". \$result->numRows();
</pre>
html;

        $sql    = 'SELECT * FROM temp WHERE name = ? ORDER BY name';
        $result = $connection->query(
            $sql,
            [
                'x11',
            ]
        );
        echo "总记录数". $result->numRows();
        echo "<hr>";

        // 与命名占位符绑定
        echo "<h1>insert 插入,占位符第2种,命名符号,注意insert 也可以直接问号占位符</h1>";
        echo <<<html
<pre>
        \$sql     = 'INSERT INTO temp(name, year) VALUES (:name, :year)';
        \$name = 'Astro Boy'.time();
        \$success = \$connection->query(
            \$sql,
            [
                'name' => \$name,
                'year' => 1952,
            ]
        );
</pre>
html;
        $sql     = 'INSERT INTO temp(name, year) VALUES (:name, :year)';
        $name = 'Astro Boy'.time();
        $success = $connection->query(
            $sql,
            [
                'name' => $name,
                'year' => 1952,
            ]
        );

        $sql    = 'SELECT * FROM temp WHERE name = ? ORDER BY name';
        $result = $connection->query(
            $sql,
            [
                $name,
            ]
        );
        echo "总记录数". $result->numRows();
        echo "<hr><hr><hr><hr><hr><hr><br><br><br><br><br><br><br><br><br>";

        // 开始使用 modelsManager 组件
        echo "<h1>select,开始使用 modelsManager 组件,和phql,和toArray方法</h1>";
        echo <<<html
        <pre>
        \$phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE id < :id:";
        \$robots = \$this->modelsManager->executeQuery(\$phql, ['id' => 3]);
        var_dump(\$robots->toArray());
</pre>
html;
        $phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE id < :id:";
        $robots = $this->modelsManager->executeQuery($phql, ['id' =>3]);
        var_dump($robots->toArray());
        echo "<hr>";

//        try {
//            $phql2 = "SELECT * FROM Apps\Models\Entities\Temp LIMIT :number:";
//            $robots = $this->modelsManager->executeQuery(
//                $phql2,
//                ['number' => 10],
//                Column::BIND_PARAM_INT
//            );
//            var_dump( $robots->toArray() );
//        }catch (\Exception $e){
//            echo $e->getMessage();
//        }

        echo "<h1>select,开始使用 phalcon 专用带变量占位符,有坑,占位符number2:int不能相同。</h1>";
        echo <<<html
        <pre>
        \$phql = "SELECT * FROM Apps\Models\Entities\Temp LIMIT {number:int}";
        \$robots = \$this->modelsManager->executeQuery(
            \$phql,
            ['number' => 2]
        );
        var_dump(\$robots->toArray());
        
        \$phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE name = {name:str}";
        \$robots = \$this->modelsManager->executeQuery(
            \$phql,
            ['name' => 'x11']
        );
        var_dump(\$robots->toArray());
        
        \$phql = "SELECT * FROM Apps\Models\Entities\Temp LIMIT {number2:int}";
        \$robots = \$this->modelsManager->executeQuery(
            \$phql,
            ['number2' => 2]
        );
        var_dump(\$robots->toArray());
        
        \$phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE name = {name}";
        \$robots = \$this->modelsManager->executeQuery(
            \$phql,
            ['name' => 'x113']
        );
        var_dump(\$robots->toArray());
        
        \$phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE id IN ({id:array})";
        \$robots = \$this->modelsManager->executeQuery(
            \$phql,
            ['id' => [1, 2, 3]]
        );
        var_dump(\$robots->toArray());
        
</pre>
html;
        $phql = "SELECT * FROM Apps\Models\Entities\Temp LIMIT {number:int}";
        $robots = $this->modelsManager->executeQuery(
            $phql,
            ['number' => 2]
        );
        var_dump($robots->toArray());
        echo "<hr>";

        $phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE name = {name:str}";
        $robots = $this->modelsManager->executeQuery(
            $phql,
            ['name' => 'x11']
        );
        var_dump($robots->toArray());
        echo "<hr>";

        //dd(555);
        $phql = "SELECT * FROM Apps\Models\Entities\Temp LIMIT {number2:int}";
        $robots = $this->modelsManager->executeQuery(
            $phql,
            ['number2' => 2]
        );
        var_dump($robots->toArray());
        echo "<hr>";

        $phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE name = {name}";
        $robots = $this->modelsManager->executeQuery(
            $phql,
            ['name' => 'x113']
        );
        var_dump($robots->toArray());
        echo "<hr>";

        $phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE id IN ({id:array})";
        $robots = $this->modelsManager->executeQuery(
            $phql,
            ['id' => [1, 2, 3]]
        );
        var_dump($robots->toArray());
        echo "<hr>";



        echo "<h1>insert,专用函数插入数据,原始表名,动态生成必要的SQL(另一种语法)</h1>";
        echo <<<html
        <pre>
        
        // 方法:excute
        \$sql     = 'INSERT INTO `robots`(`name`, `year`) VALUES (?, ?)';
        \$success = \$connection->execute(
           \$sql,
           [
              'Astro Boy',
              1952,
           ]
        );
        
        // 动态生成必要的SQL,方法 insert
        \$success = \$connection->insert(
            'robots',
            [
                'Astro Boy',
                1952,
            ],
            [
                'name',
                'year',
            ],
        );
        
        
        // 方法:insertAsDict
        \$name = 'Astro Boy11'.time();
        \$success = \$connection->insertAsDict(
            'temp',
            [
                'name' => \$name,
                'year' => 1952,
            ]
        );
</pre>
html;
        $name = 'Astro Boy11'.time();
        $success = $connection->insertAsDict(
            'temp',
            [
                'name' => $name,
                'year' => 1952,
            ]
        );
        $sql    = 'SELECT * FROM temp WHERE name = ? ORDER BY name';
        $result = $connection->query(
            $sql,
            [
                $name,
            ]
        );
        echo "总记录数". $result->numRows();
        echo "<hr>";

        echo "<h1>update,原始更新,方法 execute</h1>";
        echo <<<html
        <pre>
        \$sql     = 'UPDATE temp SET `name` = 'Astro boy' WHERE `id` = 1';
        \$success = \$connection->execute(\$sql);
        echo '有\$success被更新';
</pre>
html;
        $sql     = "UPDATE temp SET `name` = 'Astro boy' WHERE `id` = 1";
        $success = $connection->execute($sql);
        echo "有{$success}被更新";
        echo "<hr>";

        echo "<h1>update,占位符原始更新,方法 execute</h1>";
        echo <<<html
        <pre>
        \$sql     = 'UPDATE temp SET name = ? WHERE id = ?';
        \$success = \$connection->execute(
            \$sql,
            [
                'Astro Boy'.time(),
                1,
            ]
        );
</pre>
html;
        $sql     = 'UPDATE temp SET name = ? WHERE id = ?';
        $success = $connection->execute(
            $sql,
            [
                'Astro Boy'.time(),
                1,
            ]
        );
        echo "有{$success}被更新";
        echo "<hr>";

        echo "<h1>update,专用函数方法 updateAsDict, 更新数据,原始表名,动态生成必要的SQL(另一种语法)</h1>";
        echo <<<html
        <pre>
        \$success = \$connection->updateAsDict(
            'temp',
            [
                'name' => 'New Astro Boy'.time(),
            ],
            [
                'conditions' => 'id = ?',
                'bind'       => [101],
                'bindTypes'  => [\\PDO::PARAM_INT], // Optional parameter
            ]
        );
</pre>
html;
        $success = $connection->updateAsDict(
            'temp',
            [
                'name' => 'New Astro Boy'.time(),
            ],
            [
                'conditions' => 'id = ?',
                'bind'       => [101],
                'bindTypes'  => [\PDO::PARAM_INT], // Optional parameter,可选,这行去掉也行。
            ]
        );
        echo "有{$success}被更新";
        echo "<hr>";
        
        
        echo <<<html
        <pre>
        // 使用原始SQL语句删除数据,方法 execute
        \$sql     = 'DELETE `robots` WHERE `id` = 101';
        \$success = \$connection->execute(\$sql);
        
        // 占位符
        \$sql     = 'DELETE `robots` WHERE `id` = ?';
        \$success = \$connection->execute(\$sql, [101]);
        
        // 动态生成必要的SQL,方法 delete
        \$success = \$connection->delete(
            'robots',
            'id = ?',
            [
                101,
            ]
        );
</pre>
html;

        echo "<hr>";
        echo "<h1>学习phql,方法先createQuery,再 execute</h1>";
        $query = $this->modelsManager->createQuery('SELECT * FROM '.Cars::class);
//        $query = $this->modelsManager->createQuery('SELECT * FROM '.Cars::class);
        $cars  = $query->execute();
        var_dump($cars->toArray());

        echo "<h1>学习phql,方法 直接executeQuery</h1>";
        $cars = $this->modelsManager->executeQuery('SELECT * FROM Apps\Models\Entities\Brands');
        var_dump($cars->toArray());

        echo "<h1>学习phql,方法 带绑定参数</h1>";
        $query = $this->modelsManager
            ->createQuery('SELECT * FROM Apps\Models\Entities\Brands where name= :name: ');
        $cars  = $query->execute(['name'=>'宝马']);
        var_dump($cars->toArray());

        echo "<h1>学习phql,方法 直接执行,带绑定参数</h1>";
        $cars = $this->modelsManager
            ->executeQuery('SELECT * FROM Apps\Models\Entities\Brands where name= :name: ',['name'=>'宝马']);
        var_dump($cars->toArray());

        echo "<h1>学习phql,方法 不查整个对象,查标量</h1>";
        $cars = $this->modelsManager->executeQuery(
            'SELECT b.name FROM 
              Apps\Models\Entities\Brands as b
              ORDER BY b.name'
            ,['name'=>'宝马']
        );
        var_dump($cars->toArray());

        echo "<h1>学习phql,查询标量和对象混合体</h1>";
        $phql = 'SELECT c.price*0.1 AS taxes, c.* FROM Apps\Models\Entities\Cars AS c ORDER BY c.name';

        $cars = $this->modelsManager->executeQuery($phql);
        foreach($cars as $v){
            echo "汽车名称:".$v->c->name.", 价格修正". $v->taxes."<br>";
        }

        echo "<h1>学习phql,使用外连接</h1>";
        $manager = $this->modelsManager;
        $phql = 'SELECT c.*, b.* FROM Apps\Models\Entities\Cars as c 
        LEFT JOIN Apps\Models\Entities\Brands as b';
        $cars = $manager->executeQuery($phql);
        foreach($cars as $v){
            echo "汽车名称:".$v->c->name.", 品牌名称". $v->b->name."<br>";
        }

        // 也可以手动设置 on 的条件。
        $phql = 'SELECT Cars.*, Brands.* FROM Cars INNER JOIN Brands ON Brands.id = Cars.brands_id';
        //$rows = $manager->executeQuery($phql);

        echo "<h1>使用聚合</h1>";
        // 所有车的价格是多少?
        $phql = 'SELECT SUM(price) AS summatory FROM Apps\Models\Entities\Cars';
        $row  = $manager->executeQuery($phql)->getFirst();
        echo $row['summatory'];

        echo "<h1>使用每个品牌有多少辆汽车,group by</h1>";
        // 每个品牌有多少辆汽车?
        $phql = 'SELECT b.name, COUNT(*) as count 
           FROM Apps\Models\Entities\Cars as c
            left join
            Apps\Models\Entities\Brands as b 
           on b.id = c.brand_id
           GROUP BY  b.name';
        $rows = $manager->executeQuery($phql);
        foreach ($rows as $row) {
            echo  $row->name,'有',  $row->count, "<br>";
        }
        
        echo "<h1>使用phal的批量更新,将触发事件,确认更新失败将全部失败。</h1>";
        $phql ="update Apps\Models\Entities\Cars SET price=5";
        $result = $manager->executeQuery($phql);
        if ($result->success() === false) {
            $messages = $result->getMessages();
            foreach ($messages as $message) {
                echo $message->getMessage()."<br>";
            }
        }

        echo "<h1>使用查询生成器,查全部</h1>";
        $robots = $this->modelsManager->createBuilder()
            ->from('Apps\Models\Entities\Cars')
            ->join('Apps\Models\Entities\Brands')
            ->orderBy('Apps\Models\Entities\Cars.id')
            ->limit(2, 0)
            ->getQuery()
            ->execute();
        var_dump($robots->toArray());

        echo "<h1>使用查询生成器,查一行</h1>";
        $robots = $this->modelsManager->createBuilder()
            ->from('Apps\Models\Entities\Cars')
            ->join('Apps\Models\Entities\Brands')
            ->orderBy('Apps\Models\Entities\Brands.name')
            ->getQuery()
            ->getSingleResult();
        var_dump($robots->toArray());

        echo "<h1>使用查询生成器,模拟实际后台带条件查询,占位符使用,在条件中由php拼接。</h1>";
        $builder = $this->modelsManager->createBuilder();
        $builder->from('Apps\Models\Entities\Cars')
            ->where('style = :style:', ['style' => 'style2']);
        $result = $builder->getQuery()->execute();
        var_dump($result->toArray());

        echo "<h1>使用查询生成器,模拟实际后台带条件查询,占位符使用,在查询中,由mysql拼接</h1>";
        $builder = $this->modelsManager->createBuilder();
        $builder->from('Apps\Models\Entities\Cars')
            ->where('style = :style:');
        $result = $builder->getQuery()->execute(['style' => 'style2']);
        var_dump($result->toArray());

        echo "<h1>转义保留字</h1>";
        $phql   = 'SELECT id, [Like] FROM Posts';
        
        
        echo "<h1>分页实现</h1>";
        $builder = $this->modelsManager->createBuilder()
            ->from('Apps\Models\Entities\Cars')
            ->orderBy('name');
        $options = [
            'builder' => $builder,
            'limit'   => 2,
            'page'    => 1,
            'adapter' => 'queryBuilder',
        ];

        $paginator = Factory::load($options);
        $page = $paginator->getPaginate();
        var_dump($page->items->toArray());
        echo "总共".$page->total_pages. '条记录<br>';
        echo "总共".$page->total_items. '页<br>';




        // 指定表名
//        public function initialize()
//    {
//        $this->setSource('toys_robot_parts');
//    }
        // onConstruct()方法

        // 模型新增
//        $robot = new Robots();
//
//        $result = $robot->create(
//            [
//                'type' => 'mechanical',
//                'name' => 'Astro Boy',
//                'year' => 1952,
//            ]
//        );
        // if $result===false;

        // 模型更新
        //  $result =      $robot->update(
//            [
//                'type' => 'mechanical',
//                'name' => 'Astro Boy',
//                'year' => 1952,
//            ]
//        );
        // if $result ===false;

        // findFirst标准写法。
//        $robot = Robots::findFirst(11);
//
//        if ($robot !== false) {




        // 新增记录,后,用如下方法获得主键
//        $robot->save();
//
//        echo 'The generated id is: ', $robot->id;
        // 另外,模型类,可以单独设置主键字段名称!

        // 必须设置此方法。
        //$this->useDynamicUpdate(true);

        // $this->setSchema('toys');
        // 模型可以映射到不同的库名。

        //关系中,使用魔术方法get是有好处的!!原因是可以 直接加条件再过滤!!
        // 定义关系时,竟然可以直接定义过滤条件!!
        // 定义关系时,可以设置成强制检查!!。这样比较好哎。

        // 模型关系批量处理,方便阿!
//        $robots->getParts()->update(
//            [
//                'stock'      => 100,
//                'updated_at' => time(),
//            ]
//        );


       // $result = $manager->executeQuery($phql);

//        CREATE TABLE cars (
//        id int(11) NOT NULL AUTO_INCREMENT,
//  name varchar(191) DEFAULT '' COMMENT '1',
//  brand_id int not null default 0 comment '品牌id',
//  price decimal(10,2) not null default 0 comment 'price',
//  year int not null default 0 comment '2',
//  style varchar(191) not null default '' comment '3',
//  type varchar(191) not null default '' comment '4',
//  PRIMARY KEY (id),
//  index brand_id(brand_id),
//  index type(type),
//  index style(style)
//) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COMMENT='测试用表'

//        insert into cars(name,brand_id, price,year,style,type)values(
//        'ao1',1,10000,1974,'style1','style1'
//    );
//insert into cars(name,brand_id, price,year,style,type)values(
//        'ao2',1,20000,1974,'style2','style2'
//    );
//insert into cars(name,brand_id, price,year,style,type)values(
//        'b1',1,30000,2000,'style3','style3'
//    );
//insert into cars(name,brand_id, price,year,style,type)values(
//        'b2',1,40000,3000,'style4','style4'
//    );




0
1
分享到:
评论

相关推荐

    phalcon.dll(windows phalcon插件)

    Phalcon提供了许多特性,包括MVC(Model-View-Controller)结构、路由、安全、缓存、数据库适配器、视图渲染、依赖注入等。它还支持事件管理、AOP(面向切面编程)和模型验证,使得开发高效且可维护的Web应用变得...

    phalcon-mssql:phalcon mssql pdo数据库适配器

    Phalcon PHP框架MSSQL pdo db适配器。 要求 : - Phalcon &gt;= 1.2.0 and &lt;=1.3.x 安装说明 : 将“ test / app / library / db”文件夹复制到您的库文件夹中 将名称空间添加到“文件夹路径”设置-//注册一些...

    phalcon 中文文档 全中文手册

    5. **模型与数据库操作**:Phalcon提供了ORM(对象关系映射)和ODM(对象文档映射)功能,让开发者可以方便地操作数据库。手册会介绍如何创建模型,执行CRUD操作,以及如何利用查询构造器进行复杂查询。 6. **缓存...

    phalcon2中文手册+教程+DEMO

    1tutorial-invo可能是一个基于Phalcon构建的发票管理系统,它展示了如何使用Phalcon的Model来处理数据库交互,如何通过Controller处理业务逻辑,以及如何利用View展示数据。而1tutorial-master可能是一个更全面的...

    Phalcon 2.0.10 文档 html中文版

    6. 数据库抽象层和查询构建器:Phalcon的数据库组件提供了面向对象的API,方便进行数据库操作,同时支持链式查询,简化复杂的SQL构造。 7. 微框架模式:除了完整的MVC结构,Phalcon还支持微框架模式,适用于构建轻...

    Phalcon php框架 v2.0.2.zip

    PhalconPHP 是一个使用 C 扩展开发的 PHP Web 框架,提供高性能和低资源占用。   Phalcon 是一个开源的、全堆栈的 PHP 5 框架,使用 C 扩展...Phalcon 1.x还没完全迁移到Phalcon 2.0,比如目前数据库只支持MySQL。

    PHP实例开发源码-Phalcon PHP开发框架.zip

    这个压缩包"PHP实例开发源码-Phalcon PHP开发框架.zip"包含了使用Phalcon框架进行实际开发的源代码,是学习和理解Phalcon框架功能和工作原理的良好资源。 Phalcon框架的核心特性包括MVC(模型-视图-控制器)架构、...

    php phalcon项目实战

    3. 数据库操作:Phalcon提供了一个强大的ORM(对象关系映射)系统,让你能够方便地与数据库进行交互。 4. 模板引擎:学习如何使用Phalcon的VOLT模板引擎创建动态视图,以及如何定义布局、部分视图和继承结构。 5. ...

    phalcon框架的demo

    5. **缓存机制**:为了提高性能,Phalcon框架提供了缓存组件,Invo可能利用了这一特性来缓存数据库查询结果或视图部分,减少不必要的数据库访问。 6. **安全**:Invo项目还可能涉及用户认证、授权等安全方面,...

    phalcon-php

    4. **数据库交互**:Phalcon提供了一个强大的ORM(对象关系映射)层,`Phalcon\Db\Adapter\Pdo`类允许开发者轻松地连接到各种数据库系统。`Phalcon\Mvc\Model`支持CRUD操作和复杂的查询构造。 5. **依赖注入**:...

    php phalcon模型使用中文帮助文档

    Phalcon 是开源、全功能栈、使用 C 扩展编写、针对高性能优化的 PHP 5 框架。 开发者不需要学习和使用 C 语言的功能, 因为所有的功能都以 PHP 类的方式暴露出来,可以直接使用。 其中模型是我们开发中常用的,可...

    phalcon 中文chm文档

    3. **数据库交互**:Phalcon提供了高性能的数据库访问层,包括ORM(对象关系映射)和ODM(对象数据映射)。文档中讲解了如何定义数据模型,使用查询构造器执行SQL语句,以及利用Phalcon的事务处理功能。 4. **路由...

    PhalconPHP 4.1.0

    更改了Phalcon\Db\Adapter\*::getRawSQLStatement()以返回带有参数的完整SQL查询;更改了Phalcon\Filter::sanitize以在不存在过滤器时抛出E_USER_NOTICE;PHQL现在支持将扩展ASCII表中的任何可打印字符用于转义...

    Phalcon 3.0.0 中文文档

    作为一款全栈框架,Phalcon提供了一系列组件,涵盖了从路由、数据库交互到视图渲染等多个方面,使得开发者能够以更简洁、高效的方式编写代码。 一、Phalcon的特性与优势 1. C语言扩展:Phalcon是用C语言编写的,并...

    phalcon 中文参考文档

    作为一款全栈框架,Phalcon包含了路由、视图、模型、控制器、数据库适配器、缓存等多个核心组件,为开发者提供了丰富的功能和高效的开发工具。 中文参考文档"phalcon_zh_cn_docs"涵盖了Phalcon框架的各个方面,是...

    PHP7框架Phalcon7 v1.2.3

    Phalcon 也是松耦合的,可以根据项目的需要任意使用其他对象。Phalcon 不只是为了卓越的性能, 我们的目标是让它更加健壮,拥有更加丰富的功能以及更加简单易于使用!基于Phalcon框架1.3版本开发,继承优化了DI(多...

    Phalcon1.3中文手册,纯手工翻译

    2. ORM(对象关系映射):Phalcon的Active Record和DAO(数据访问对象)提供了一种方便的方式来操作数据库。开发者可以使用PHP类直接操作数据库记录,简化了SQL查询的编写。 3. 缓存:Phalcon内置了多种缓存机制,...

    swoole-phalcon

    3. 创建Swoole服务器:使用Swoole创建一个服务器实例,并配置Phalcon的前端控制器(如`public/index.php`)作为处理器。 4. 调整Phalcon配置:配置Phalcon以适应Swoole的运行环境,例如关闭session的文件存储,因为...

Global site tag (gtag.js) - Google Analytics