前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >制作一个PHP简易框架(九)-- ORM

制作一个PHP简易框架(九)-- ORM

作者头像
caoayu
发布2021-03-03 15:03:08
4690
发布2021-03-03 15:03:08
举报
文章被收录于专栏:caoayu的分享caoayu的分享
code
code

项目地址:https://github.com/ayuayue/php-frame

制作一个PHP简易框架(一)–准备工作

制作一个PHP简易框架(二)– 引入容器

制作一个PHP简易框架(三)– 信息调试

制作一个PHP简易框架(四)– 路由系统

制作一个PHP简易框架(五)– 响应

制作一个PHP简易框架(六)– 视图模板

制作一个PHP简易框架(七)– 路由及路径优化

制作一个PHP简易框架(八)– 配置中心

制作一个PHP简易框架(九)– ORM

制作一个PHP简易框架(十)– Session and Cookie


从现在开始进行对数据库的交互,在大部分框架中,都不会直接使用 sql 来直接进行数据库操作,但是也都保留了这种原始的方式,基本都是使用 ORM 的方式来进行操作,这可以增加项目的兼容性,即使更换了数据库版本或者使用了新的数据库,大部分的操作还是不变的。

安装

这次使用 illuminate/database 这个 orm ,项目地址。这个开发包也是 laravel 框架使用的 orm

代码语言:javascript
复制
composer require "illuminate/database"
composer require "illuminate/events"

使用

首先创建 orm 的服务提供者,然后注册到容器中,使用容器来管理此服务.

代码语言:javascript
复制
# app/Providers/DatabaseServiceProvider.php
<?php

namespace App\Providers;

class DatabaseServiceProvider extends AbstractServiceProvider
{
    public $provides = [
        'db'
    ];

    public function register()
    {
        $container = $this->getContainer();
        $container->add('db', $this->illuminate()); # 方便更换orm
    }

    private function illuminate()
    {
        $database = config('database.mysql');
        $capsule = new Capsule();
        $capsule->setEventDispatcher(new Dispatcher(new Container));
        $capsule->addConnection($database);
        $capsule->setAsGlobal();
        $capsule->bootEloquent();
        return $capsule;
    }
    
}

在配置文件中加入该服务

代码语言:javascript
复制
# config/app.php
<?php

return [
    'name' => env('APP_NAME','XXXX'),
    'test' => 'app',
    'debug' => env('APP_DEBUG',false),
    'providers' => [
        App\Providers\AppServiceProvider::class,
        App\Providers\ViewServiceProvider::class,
        App\Providers\DatabaseServiceProvider::class,
    ]
];

配置数据库信息到 env 文件中,并使用 config 来调用 env 中配置信息.

代码语言:javascript
复制
# config/database.php
<?php
return [
    'database' => [
        'mysql' => [
            'driver' => env("DB_CONNECTION",'mysql'),
            'host' => env("DB_HOST",'127.0.0.1'),
            'database' => env('DB_DATABASE'),
            'username' => env('DB_USERNAME'),
            'password' => env('DB_PASSWORD'),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci'
        ]
    ]
];

env 文件中加入配置信息

代码语言:javascript
复制
# .env
APP_DEBUG=true
APP_CACHE=false
APP_NAME=caoayu

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=php-frame
DB_USERNAME=root
DB_PASSWORD=root

创建模型 Model

首先创建数据库,并插入一条语句。语句如下

代码语言:javascript
复制
create table if not exists `users` ( `id` int unsigned auto_increment,`email` varchar(50) not null,`name` varchar(50) not null,`password` varchar(64) not null,primary key (`id`)) engine=innodb default charset=utf8;

使用 schema 创建表。

代码语言:javascript
复制
# app\Models\Tables.php
<?php

namespace App\Models;

class Tables
{
    public function createUser()
    {
        app('db')::schema()->create('users',function ($table){
            $table->increments('id');
            $table->string('name', 50)->nullable($value = false);
            $table->string('email',50)->nullable($value = false);
            $table->string('password',50)->nullable($value = false);
        });
    }
}

生成

代码语言:javascript
复制
# app\Controllers\HomeController.php

use App\Models\Table;

$table = new Table;
$table->createUser();
测试查询构造器
代码语言:javascript
复制
# app\Controllers\HomeController.php

$user = app('db')::table('users')->insert([
    'name' => 'zs',
    'email' => '123',
    'password' => '123456'
]);
dump(app('db')::table('users')->get());
创建助手函数
代码语言:javascript
复制
# helpers.php
if (!function_exists('db')) {
    function db($name)
    {
        return app('db')::table($name);
    }
}

简化后的使用方式

代码语言:javascript
复制
db('users')->get();
db('users')->find(1);
db('users')->insert([
    'key' => 'value',
]);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 使用
    • 创建模型 Model
      • 测试查询构造器
        • 创建助手函数
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档