PHP

ccORM使用说明

字号+ 编辑: 种花家 修订: 种花家 来源: 原创 2023-09-11 我要说两句(2)

针对本站推出的ORM附带的操作说明文档。

ORM源码地址

这个文档是针对本站提出的ORM对应定制的, 源码地址链接 http://www.wkwkk.com/article/f166522c5c3d490203fb2456bcdc37d0.html

连贯操作

以下是增删改查基本指令说明:

连贯操作查询语句 select from where order by limit

select(...)->from(...)->where(...)->having(...)->groupBy(...)->orderBy(...)->limit(...)->all()/row()/single() 这样的连贯操作方式是以构造形式取多行、取一行、取单个;

举例:

select id,name from prefix_article where is_shown = 1 order by update_time desc limit 50;

用本orm可以这样写:

// 类先继承基础模型,基础模型实例化Pdo操作类
$this->onRead()
    ->select('id,name')
    ->from('article')
    ->where([
        'is_shown' => 1
    ])
    ->orderBy('update_time desc')
    ->limit(50)
    ->row();

其中, 本orm采用了读、写、事务库调用分离的方式, 那么onRead()方法是调用读库。onWrite类似laravel框架当中orm用到的onWriteConnection方法, 顾名思义, 如果在$this指针后面调用onWrite()方法就是调用写库。onTrans()方法是调用事务。这三种方法返回的都是PDO被实例化后的对象

from方法内传入的参数article不传数据表前缀是因为在配置对象当中prefix选项事先已经写好。

连贯操作左连接

->leftJoin([string 表名称], [string 表别名], [string on关键字后边的关系表达式])

如果使用了左连接, 一般来说都会在主表上设置别名, 联表时请给主表增加别名

例如以下原生SQL语句:

select id from prefix_table_a a left join prefix_table_b as b on a.id = b.aid;

就可以写成以下连贯语句

$this->onRead()
     ->select('id')
     ->from('table_a', 'a')
     ->leftJoin('table_b', 'b', 'a.id = b.aid')
     // ->leftJoin('table_c', 'c', 'c.aid = a.id')
     ->all();

连贯操作非查询语句 insert update delete set values

连贯操作统一用go()方法来确定执行。

举例说明

sql原生插入语句, 其中两个?号各绑定到$v1, $v2两个PHP变量里

insert into prefix_member ( field1, field2 ) values ( ?, ? );

可以写成以下php连贯语句

$this->onWrite()
    ->insert('member')  // 事先在数据库配置数组里面规定了prefix为"prefix_"
    ->values([
        'field1' => $v1,
        'field2' => $v2,
    ])
    ->go();

sql原生更新语句, 其中两个?号各绑定到$v1, $v2两个PHP变量

update prefix_member set field1 = ? where ( status = ? );

可以写成以下PHP连贯操作语句

$this->onWrite()
    ->update('member')
    ->set([
        'field1' => $v1,
    ])
    ->where([
        'status' => $v2,
    ])
    ->go();

sql原生删除语句, 其中?号绑定到PHP变量$v

delete from prefix_member where trashfield = ?;

可以写成以下PHP连贯操作语句

$this->onWrite()
    ->delete('member')
    ->where([
        'trashfield' => $v,
    ])
    ->go();

原生语句

原生语句操作查询语句

sql(...)->bind(...)->all()/row()/single() 和上文一样, 为sql原生语句取多行取一行取单个

以使用本orm实现上个原生sql语句的写法, 写法是:

$this->onRead()
     ->sql('select * from *_article where id = 6')
     ->row();

如果id传的参数是一个变量$id, 那么写法如下:

$this->onRead()
    ->sql('SELECT * FROM *_article WHERE id = ?')
    ->bind([
        $id,
    ])
    ->row();

其中bind方法传入的参数是按问号(?)出现的次序逐个在数组中出现的,内部实现仅是用pdo按次序绑定参数而已。

原生语句操作非查询语句

调用sql(...)->bind(...)->go() 的方法和上文一样, 也是为习惯于写原生非查询语句来实现的简单操作方式。

写法举例如下:

$this->onWrite()
    ->sql('insert into lalala ( fileda, fieldb ) values ( ?, ? )')
    ->bind([
        $samplevalue_a,
        $samplevalue_b,
    ])
    ->go();

缓存查询数据

在查询语句中使用在最后操作方法执行之前插入一句cache()方法就可以了, 支持两个可选参数,第一个参数是生存秒数,默认为30秒,第二个参数是自定义key值, 不写则orm自动根据sql去hash一个值。

代码例子:

$this->onRead()
    ->select('content')
    ->from('table_a')
    ->where([
        'id' => $id,    
    ])
    ->cache(5, 'arch_' . $id)
    ->single();


阅完此文,您的感想如何?
  • 有用

    2

  • 没用

    0

  • 开心

    0

  • 愤怒

    0

  • 可怜

    0

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.交流群: PHP+JS聊天群

相关课文
  • mac开发接入微信公众号接口返回报错 cURL error 56: SSLRead() return error -9806

  • pecl安装程序时报错Array and string offset access syntax with curly braces is no longer supported

  • PHP的换行符是什么

  • 由于商家传入的H5交易参数有误,该笔交易暂时无法完成,请联系商家解决

我要说说
网上宾友点评
1 楼 IP 106.50.192.27 的嘉宾 说道 : 1552567573
你这个orm功能太少,喜欢功能全的

2 楼 IP 223.20.25.26 的嘉宾 说道 : 1568472641
玩玩