EASYLT文档 > 使用框架 > ORM

开发场景

  • ORM实现了mysql增删改查、事务、悲观锁操作,避免书写有漏洞的sql、优化实体类结构,如防止sql注入,同时让业务易于理解、更改。
  • ORM原生写法

  • $mysql_orm->db('sql'); //【必填项】直接在类方法实参中传入原生sql
  • · insert操作,返回成功写入数据的行数量。
  • · delete操作,必须在sql中设置where条件。返回成功删除数据的行数量。
  • · update操作,必须在sql中设置where条件。返回成功更新数据的行数量。
  • · select操作,返回类型为array,返回数据查询结果。
  • ORM非原生写法

  • ORM非原生写法操作时,首先选择操作模式,写法为:$mysql_orm->model(''); 形参有四种,分别为:insert、delete、update、select,model(),操作模式后的类方法顺序请按照文档顺序调用。
  • · 有两种写法,可组装或分组,$mysql_orm->model('select')->from('*,user')->query();为组装写法,以下为分组写法:
       $mysql_ob = $mysql_orm->model('select');
       $mysql_ob->from('*,user');
       $mysql_ob->query();
  • insert写入操作

    <?php
    $mysql_ob = $mysql_orm->model('insert');//【必填项】选择操作模式为写入
    $mysql_ob->table('username&sex,user');//【必填项】输入写入的字段与表名,用逗号分隔;多字段用&分隔。
    $mysql_ob->values('liteng,nan&leiting,nv');//【与select()方法二选一必填项】输入字段相应写入的值,用逗号分隔;如果写入多条数据请用&分隔;如参数为变量,拼接如:$mysql_ob->values($username.','.$sex.'&'.$username2.','.$sex2);
    $mysql_ob->select('select username,sex from user2 where sex=&$nan&');//【与values()方法二选一必填项】直接输入sql查询语句,条件值无论为变量、常量、%%模糊查询、[]正则查询或直接输入标量都需要包含在&$&中间。
    $mysql_ob->query();//【必填项】返回成功写入数据的行数量
    
    

    delete删除操作

    <?php
    $mysql_ob = $mysql_orm->model('delete');//【必填项】选择操作模式为删除
    $mysql_ob->table('user');//【必填项】输入表名
    $mysql_ob->where('username=&$'.$username.'& or sex=&$nan&');//【必填项】条件值无论为变量、常量、%%模糊查询、[]正则查询或直接输入标量都需要包含在&$&中间,如:'username=&$'.$username.'&'或'username=&$liteng&'或'username like &$%李%&'
    $mysql_ob->query();//【必填项】返回成功删除数据的行数量
    
    

    update更新操作

    <?php
    $mysql_ob = $mysql_orm->model('update');//【必填项】选择操作模式为更新,可多表更新。
    $mysql_ob->table('user,user2');//【必填项】输入表名,多表更新用逗号分隔表名。
    $mysql_ob->set('user.sex=&$nv&,user2.sex=&$nv&');//【必填项】输入更新字段与值,值无论为变量、常量或直接输入标量都需要包含在&$&中间且用逗号分隔每组更新参数。
    $mysql_ob->where('user.username=&$'.$username.'& and user2.username=&$'.$username2.'&');//【必填项】条件值无论为变量、常量、%%模糊查询 、[]正则查询或直接输入标量都需要包含在&$&中间,如:'username=&$'.$username.'&'或'username=&$liteng&'或'username like &$%李%&'
    $mysql_ob->query();//【必填项】返回成功更新数据的行数量
    
    

    select查询操作

    <?php
    $mysql_ob = $mysql_orm->model('select');//【必填项】选择操作模式为查询,支持全连接查询(PHP不支持并行查询,内连接查询、外连接查询请用全连接查询拼接sql串行查询)、子查询、分组查询、模糊及正则查询;全连接查询、子查询、模糊及正则查询sql语句直接写在where()方法中。
    $mysql_ob->from('username&sex,user');//【必填项】输入字段与表名,用逗号分隔;多字段用&分隔。
    $mysql_ob->where('username=&$'.$username.'& or sex=&$nan&');//【选填项】条件值无论为变量、常量、%%模糊查询、[]正则查询或直接输入标量都需要包含在&$&中间,如:'username=&$'.$username.'&'或'username=&$liteng&'或'username like &$%李%&'
    $mysql_ob->group_by('username');//【选填项】输入分组字段名,from()、order_by()方法中字段要和group_by()中的字段相同,且from()方法中字段格式如下:'username as 姓名&count(product) as 购物次数,user'
    $mysql_ob->order_by('username,desc');//【选填项】输入排序字段名及排序规则-desc\asc,用逗号分隔。
    $mysql_ob->limit('0,10');//【选填项】输入限制结果集参数-offset,num,用逗号分隔,仅输入一个参数则默认为num。
    $mysql_ob->query();//【必填项】返回类型为array,返回数据查询结果。
    
    

    事务

  • 事务支持ORM的原生、非原生写法,开启事务后必须commit提交或rollback回滚才能结束事务。
  • · 开启事务:$mysql_orm->trans();
  • · 事务回滚:$mysql_orm->rollback();
  • · 事务提交:$mysql_orm->commit();
    示例
  • <?php
    $mysql_orm->trans();
    $result = $mysql_orm->db("insert into account(username) values('init')");
    $result2 = $mysql_orm->db("insert into account(username) values('init2')");
    if(!$result || !$result2){
        $mysql_orm->rollback();
    }
    $mysql_orm->commit();
    //如上示例,当$result、$result2有一个未执行成功则数据回滚不进行提交。
    
    

    悲观锁

  • ORM原生写法的悲观锁请用原生sql自行实现,如select * from account where id=1 for update;
    此处仅支持ORM非原生写法且必须开启事务。
  • · 共享锁(其他事务可以读但不能写),如下:
       $mysql_orm->model('select')->from('*,account')->where('id=&$1&')->lock('read')->query();
  • · 排他锁(其他事务不能读也不能写),如下:
       $mysql_orm->model('select')->from('*,account')->where('id=&$1&')->lock('write')->query();
  • · 通过lock('')开启悲观锁,传入参数read为共享锁,write为排他锁。