where()方法中|和&的用法
//快捷查询
Db::table('think_user')
->where('name|title','like','thinkphp%')
->where('create_time&update_time','>',0)
->find();
//sql:
SELECT * FROM `think_user`
WHERE ( `name` LIKE 'thinkphp%' OR `title` LIKE 'thinkphp%' )
AND ( `create_time` > 0 AND `update_time` > 0 ) LIMIT 1whereOr()方法用法
->whereOr([//第一维代表多个条件 [//第二维之间用or链接 //第三维之间用and连接 ['create_time', '<=', time()], ['status', '=', '1'] ],[ ['id', '>=', 10], ['update_time', '>=', time()], ] ]) //拼凑出来的结果: //where (create_time <= time() and status = 1) //or (update_time >= time() and id >= 10)
belongsToMany(多对多)修改的使用
适用于多对多,并且有中间表的,例如,不同用户关联不同的兴趣标签,关联数据单独存在一个表中:
建表:
article表(字段:id,……)
label表(字段:id,name,……)
article_label表(字段:id,article_id,label_id,createtime,……)
article模型中:
//方法名随意,调用时使用此方法名
public function Labels(){
//参数1:关联模型
//参数2:中间表表名,不带表前缀
//参数3:中间表 关联 关联模型的外键
//参数4:中间表 关联 当前模型的外键
return $this->belongsToMany('LabelModel', 'article_label','label_id','article_id');
}控制器中使用:
//查询
$data=ArticleModel::with('Labels')->select();
//使用,因为查询结果为对象,所以调用方式如下:
//打印第一条文章数据下第一个标签的名字
dump($data[0]->Labels[0]->name);
//接口调用:直接用json_encode()处理后自动变成三维数组
echo json_encode($data);
//删除
$data = ArticleModel::find(1);//查询文章信息
$data->Labels()->detach();//删除article_label表中当前文章的信息
//添加
$label_ids=[1,2,3,4,5,6,7,8,9];//需要绑定的label表主键id
//参数1是需要绑定的多个label_id,参数2是其他需要补充的字段
$data->Labels()->attach($label_ids,['createtime'=> time()]);//保存hasMany(一对多)的使用
多表一对多的使用
一般用于一条记录对应多条记录,例如某个文章的评论:
建表:
article表(字段:id,……)
comment表(字段:id,article_id,content,……)
article模型中:
//方法名字随意,调用时方法名作为参数使用
public function comments(){
//参数1:关联模型名
//参数2:关联模型外键
//参数3:当前模型表主键
return $this->hasMany('CommentModel','article_id','id');
}控制器中使用:
$data=ArticleModel::with('comments')->select();
//使用,因为查询结果为对象,所以调用方式如下:
//打印第一条文章数据下第一条评论数据的内容
dump($data[0]->comments[0]->content);
//接口调用:直接用json_encode()处理后自动变成三维数组
echo json_encode($data);单表一对多的使用
一般用于多级分类存在同一个表中:
建表:
classify表(字段:id,name,level,pid,……)
classify模型中:
//方法名字随意,调用时方法名作为参数使用
public function secondClassify(){
//参数1:当前模型名
//参数2:上级id(原关联模型外键)
//参数3:当前模型表主键
return $this->hasMany('ClassifyModel','pid','id');
}控制器中使用:
//查询一级分类,自动补全二级
$data=ClassifyModel::with('secondClassify')->where('level',1)->select();
//使用,因为查询结果为对象,所以调用方式如下:
//打印第一条一级分类数据下第一个二级分类的名称
dump($data[0]->secondClassify[0]->name);
//接口调用:直接用json_encode()处理后自动变成三维数组
echo json_encode($data);hasOne(一对一)的使用
一般用于主记录查询子记录(子表有关联记录在主表),例如一个用户信息只对应一个用户:
建表:
user表(字段:id,message_id,……)
message表(字段:id,user_id,……)
user模型中:
//方法名字随意,调用时方法名作为参数使用
public function user(){
//参数1:关联模型名
//参数2:关联模型外键
//参数3:当前模型主键
return $this->hasOne('UserModel','message_id','id');
}控制器中使用:
$data=UserModel::with('user')->select();
//使用,因为查询结果为对象,所以调用方式如下:
//打印当前用户信息对应的用户生日
dump($data[0]->user->birthday);
//接口调用:直接用json_encode()处理后自动变成三维数组
echo json_encode($data);belongsTo(一对一)的使用
一般用于主记录查询子记录(子表有一条记录属于主表),例如一个用户只有一条用户信息:
建表:
user表(字段:id,message_id,……)
message表(字段:id,user_id,……)
classify模型中:
//方法名字随意,调用时方法名作为参数使用
public function messages(){
//参数1:关联模型名
//参数2:关联模型外键
//参数3:当前模型主键
return $this->belongsTo('MessageModel','message_id','id');
}控制器中使用:
$data=UserModel::with('messages')->select();
//使用,因为查询结果为对象,所以调用方式如下:
//打印第一条用户数据下子信息的金额
dump($data[0]->messages->money);
//接口调用:直接用json_encode()处理后自动变成三维数组
echo json_encode($data);连贯操作column方法
//取单列:获取所有标签名,输出结构:[id=>name]
LabelModel::column('name','id');
//取多列:获取所有标签名和创建时间,输出结构:[id=>[id,name,createtime]]
LabelModel::where('status',1)->column('name,createtime','id');连贯操作cache()的使用
cache()可以用于select、find、value和column方法,以及其衍生方法,使用cache方法后,在缓存有效期之内不会再次进行数据库查询操作,而是直接获取缓存中的数据,关于数据缓存的类型和设置可以参考缓存部分。
1. 简单的存储
//查询news表中id=10的新闻存储于cache中
//写true默认读取配置的中缓存时间
db('news')->cache(true)->find(10);
//你也可以自定义时间,60秒表示:
db('news')->cache(true,60)->find(10);2. 指定缓存标识
//等同于使用缓存时的键,默认读取配置的中缓存时间:
db('news')->cache('key')->find(15);
//全局读取这条数据:
$data = \think\Cahce::get('key');3.支持设置缓存标签:
//缓存键:key,缓存时间:60秒,标签为:tagName
db('news')->cache('key',60,'tagName')->find(15);
//全局读取带标签的缓存:
Db::name('news')->cache('news_list',60,'shx')->select();
$data = \think\Cache::tag('shx')->get('news_list'); 如果帮助到你,请赏杯奶茶喝~
- 本文链接: https://www.shx1024.top//index/article/details/article_id/18.shtml
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。