数据库访问组件

v1.0.0 2019-04-24 08:07 UTC

This package is auto-updated.

Last update: 2024-09-25 07:54:40 UTC


README

  • 导入数据访问层

安装

composer install scalpel/db

适配器

查询代理,查询 SQL 语句

## Profiler
Log and profiler all sql

驱动器

数据库连接,真实查询 SQL

## mysql\Mysql
Mysql driver

## mysql\ResultSet
Query select statement's result

SQL

创建 SQL 语句,依赖 sql\InterfaceQuoter

表的 CRUD 操作,

  • 添加(模型 / id)
  • 删除()
  • 更新()
  • 查找()
  • 信息()
  • 计数()

对象关系映射(ORM)

  • 表初始化关系定义
  • 在 ResultSet 中使用 call 插件机制动态为模型增加功能
  • 在 Relation 对象中将方法注入 Model 对象
  • 在哪一层实现,在 Table 层实现,未绑定模型的绑定 Model 对象
table与table的关联
配置:
    $conf['detail'] = array(
        'type' => JRelations::HAS_ONE,
        'table' => 'knowledge_cnt',
        'forkey'  => 'info_id',
        'onUpdate' => [
            field => ["content", "#id#", "url"],
            autoUpdate => 1
        ],
        'onSelect' => [
            alongField => ['content'],  // 直接注入到对象的prototype
            field => '*',
            mapName => 'knDetail', // deafult getDetail
            ]
        );

table 中定义 JRelations
    判断插入关联,
    判断删除关联,
    判断更新关联
    
查询注入 
    hasOne的定义, 
    getXxx() -> 未定义 -> 查询 $this->relations->get(this->id, Xxx关系)
        返回是数组?对象?还是字段

hasMany的定义
    todo...

phalcon参考
    $this->belongsTo('product_types_id', 'ProductTypes', 'id', array(
        'reusable' => true
    ));
    自己的id, 关联的对象, 对象的id, 配置参数
    

待办事项

  • √ 增加读取分离,如何实现,置入 Adapter 或是 Driver_
  • √ 查询缓存
  • √ ORM 实现
  • √ 应用层的分库分表
  • 事务

已知问题

  • 表必须要有 id 主键,没有 id,模型更新将不达预期,使用 model.setIdentifier(id) 设置