具体文档:https://www.kancloud.cn/dengyulin/think/58288
进行原生的SQL查询 $Model->query('SELECT * FROM think_user WHERE status = 1');
如果你当前采用了分布式数据库,并且设置了读写分离的话,query方法始终是在读服务器执行,因此query方法对应的都是读操作,而不管你的SQL语句是什么
`Model = new Model() // 实例化一个model对象 没有对应任何数据表 Model->execute("update think_user set name='thinkPHP' where status=1");`如果你当前采用了分布式数据库,并且设置了读写分离的话,execute方法始终是在写服务器执行,因此execute方法对应的都是写操作
新版新增了子查询支持,有两种使用方式:1、使用select方法 当select方法的参数为false的时候,表示不进行查询只是返回构建SQL,例如: // 首先构造子查询SQL subQuery = model->field('id,name')->table('tablename')->group('field')->where(where)->order('status')->select(false);2、使用buildSql方法model->field('id,name')->table('tablename')->group('field')->where(model->table(
多表查询
Subscribe外链Order表,在Subscribe这个模型中增加
public function orders()
{
return $this->belongsTo('app\common\model\Order', 'subscribe_id', 'subscribe_id');
}
控制器中使用
list = this->model->where(
->withJoin([
'orders' => ['order_amount', 'pay_status','deliver_status']
], 'LEFT')
->page(
->select();
得到某条记录的单个字段值
this->model->field('id')->where(
条件更新:
save = this->model->whereIn('subscribe_id',ids)->update(
save = this->model->update(post, ['time_id' =>
UserAddress::edit(addressInfo, id, 'id')
res = this->model->where('config_name',"DoctorVisit")->save(array("value"=>
//新增记录
UserAddress::create($addressInfo);//新增后可获取整条记录
this->model-save(
按条件删除
$this->model = new DoctorTime();
row = this->model->whereIn('id',
row->isEmpty() &&
try {
save = row->delete();
} catch (\Exception $e) {
$this->error('删除失败');
}
1.withjoin是一种方法 static function getVisitResult() { result = self::withjoin('userItems','LEFT') ->where('userItems.id','=',1) ->order('id desc') ->select()->toArray(); return result = self::with(['userItems' => functionquery->where('id',1); }]) ->with('companyItems') -(>order('id desc') ->select()->toArray(); return
字符串模式查询(采用_string 作为查询条件) 数组条件还可以和字符串条件混合使用,例如:User = M("User"); // 实例化User对象 map['name'] = 'ok'; map['_string'] = 'status=1 AND score>10'; User->where(
请求字符串查询方式 请求字符串查询是一种类似于URL传参的方式,可以支持简单的条件相等判断。map['id'] = array('gt','100'); map['_query'] = 'status=1&score=100&_logic=or';得到的查询条件是:id>100 AND (status = '1' OR score = '100')
复合查询 复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以可以完成比较复杂的查询条件组装。 例如: where['name'] = array('like', '%thinkphp%'); where['title'] = array('like','%thinkphp%'); where['_logic'] = 'or'; map['_complex'] = where; map['id'] = array('gt',1);查询条件是 (id>1)AND( (namelike'%thinkphp%')OR(titlelike'%thinkphp%') ) 复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。 很多查询方式可以相互转换,例如上面的查询条件可以改成:where['id'] = array('gt',1); where['_string'] = ' (name like "%thinkphp%") OR ( title like "%thinkphp") ';最后生成的SQL语句是一致的。
区间查询
where[] = array('start_time','between',today_start,
where['end_time']=array('ELT',today_end);
$doctor_time = new DoctorTime();
time_info = doctor_time->whereBetween('start_time',"today_start,today_end")->whereBetween('end_time',"today_start,today_end")->find();
从thinkphp 5.1.x后vendor的使用方法发生变化,文档又没有详细说明。官方真的太坑了!
在thinkPHP 5.1.X后新版取消了Loader::import方法以及import和vendor助手函数,推荐全面采用命名空间方式的类以及自动加载机制,如果必须使用请直接改为php内置的include或者require语法。
原来的import(“Vendor.Classes.PHPExcel.IOFactory”);或Vendor(‘phpoffice.phpexcel.Classes.PHPExcel.IOFactory’);方法已经不再使用。
请使用下面的方法:
thinkphp6 使用vendor中的第三方库
require_once('/data/www/xxxxxxx/vendor/PHPExcel/PHPExcel.php');