【ORM】用PHP实现一个简单的ORM【原创】

PhpOrm

一、介绍

用PHP实现了一个ORM,能够实现:

  • 支持MySQL、Oracle、PostgreSQL
  • 新增/批量新增
  • 查询单条/查询所有/条件查询/组合查询
  • 缓存字段
  • 条件查询支持:!=、like、in、not in、between、lt、gt、is_null等
  • 排序
  • limit
  • 更新/批量更新
  • 删除/批量删除

具体的Git地址:码云


二、使用说明

更多的实例可以见test目录下的测试文件


1. 实例化

注意:需要加载common.php文件

<?php
require_once 'common.php';

try {
    // 数据库名.表名
    $table_name = 'phporm.app_info';

    // 实例化
    $model = PHPOrm::init($table_name);

} catch (\DB_Exception $e) {
    var_dump('数据库错误');
    var_dump($e->getMessage());
} catch (\Exception $e) {
    var_dump('其他错误');
    var_dump($e->getMessage());
}

2. 新增

<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);
    
// 新增一条数据
$single_data = [
    'name' => '第53个应用',
    'description' => '这个是描述',
    'product_id' => 4,
    'service_id' => 3,
    'developer' => 'hello',
    'operater' => 'xiaoming',
    'ipmortance' => 4,
    'app_type' => 'web',
];
$single_res = $model->insert($single_data);
var_dump($single_res);

// 新增一条数据
$batch_data = [
    [
        'name' => '第54个应用',
        'description' => '这个是描述',
        'product_id' => 4,
        'service_id' => 3,
        'developer' => 'hello',
        'operater' => 'xiaoming',
        'ipmortance' => 4,
        'app_type' => 'web',
    ],
    [
        'name' => '第55个应用',
        'description' => '这个是描述',
        'product_id' => 3,
        'service_id' => 6,
        'developer' => 'hello2',
        'operater' => 'xiaoming55',
        'ipmortance' => 4,
        'app_type' => 'server',
    ],
];
$batch_res = $model->batch_insert($batch_data);
var_dump($batch_res);

3. 更新

<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

$update_data = [
    'name' => '第54个应用 - 新的',
    'description' => '这个是描述 - 新的'
];
$update_res = $model->update($update_data, ['id' => 57]);
var_dump($update_res);

4. 删除

注意:一般不建议硬删除,一般是软删除

<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

$delete_where = [
    'name' => '第55个应用'
];
$delete_res = $model->delete($delete_where);
var_dump($delete_res);

5. 查询

A. 查询一条

getOne 第一个参数(必):where语句 第二个参数(非必):字段

<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

$where = [
    'name' => '第54个应用'
];
$one_app = $model->getOne($where);
var_dump($one_app);

$one_app = $model->getOne($where, ['id', 'description']);
var_dump($one_app);

B. 查询所有

getAll 第一个参数(非必):字段

<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

$all_apps = $model->getAll(['id', 'description']);
var_dump($all_apps);

C. 查询多个

get 第一个参数(必):where语句 第二个参数(非必):字段

<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

$where = [
    'product_id' => 3
];
$apps = $model->get($where, ['id', 'description']);
var_dump($apps);

D. 排序

order_by 数组参数,支持多个条件组合排序,正序:asc,倒序:desc

<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

$where = [
    'product_id' => 3,
    'service_id' => 2
];
$apps = $model->order_by(['id' => 'desc'])->get($where, ['id']);
var_dump($apps);
E. limit查询

limit查询,查询固定的几条
注意:limit必须在get前面才会生效

<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

// limit,必须在get前面
$where = [
    'product_id' => 3,
    'service_id' => 2
];
$apps = $model->order_by(['id' => 'desc'])->limit(2)->get($where, ['id']);
var_dump($apps);


F. 大于/小于查询
  • gt:大于查询 >
  • lg:小于查询 <
  • egt:大于等于查询 >=
  • elt:小于等于查询 <=
<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

$where = [
    'product_id' => 3,
    'status' => ['elt' => 4]
];
$start_time = date('Y-m-d H:i:s', strtotime('-1 day'));
$end_time = date('Y-m-d H:i:s');
$where['created_at']['gt'] = $start_time;
$where['created_at']['lt'] = $end_time;

G. 不等于查询

ne 不等于 支持数组也支持字符串

<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

$where = [
    'product_id' => ['ne' => [1, 2]],
    'status' => ['ne' => 3]
];

$apps = $model->get($where, ['id']);
var_dump($apps);

H. like查询
<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

$where = [
    'name' => ['like' => '%申请%']
];
$apps = $model->get($where, ['id', 'name']);
var_dump($apps);

I. is NULL/is not NULL查询
  • is_null is NULL
  • is_not_null is NOT NULL
<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

$where = [
    'deleted_at' => ['is_null' => '']
];
$apps = $model->get($where, ['id', 'name']);
var_dump($apps);

J. in/not in 查询
<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

$where = [
    'app_type' => ['in' => ['appsvr', 'svr']],
    'product_id' => ['not_in' => [1, 3]]
];
$apps = $model->get($where, ['id', 'name', 'app_type', 'product_id']);
var_dump($apps);

K. 查询上次执行的sql

可以通过$model->last_sql来输出上次执行的sql

<?php

// 表名
$table_name = 'phporm.app_info';

// 实例化
$model = PHPOrm::init($table_name);

$sql = $model->last_sql;
var_dump($sql);

Todo

  • 缓存字段
  • 测试Oracle和PostgreSQL
  • join方法
  • group by方法
  • 聚合查询-count、max、min、avg、sum
  • 原生sql执行
  • debug
  • error
  • 事务功能
上一篇:Nginx服务器---编译安装NGINX


下一篇:Mongodb4.4.1分片集群搭建