return 数组 php tp5,tp5.1 使用心得

1、数据集

数据库的查询结果也就是数据集,数据集的类型是一个二维数组,如果要判断是否为空,不能直接使用empty,而必须使用数据集对象的isEmpty方法判断

模型查询出来的是数据集,toArray()方法可转换成数组

DB查询出来的二维数组可以为数据集可以为数组,在database.php中修改配置:

'resultset_type'  => 'array',    //数组

'resultset_type'  => 'collection',    //数据集

2、模型查询的结果是一个对象

将对象转换成数组,使用toArray有可能无效,可以使用json_decode(json_encode(对象,true))来转换成数组

3、DB查询和模型查询的区别

他们查询的结果都是数据集,但是模型查询出来是对象,Db查询是数组

4、初始化方法initialize

控制器类继承了系统控制器基类(thinkController)的话,才可以定义控制器初始化方法initialize,

该方法会在调用控制器的方法之前首先执行

5、模板资源定位

在template.php配置文件里:

'tpl_replace_string'  =>  [

'__STATIC__'    => '/static',

'__LAYUI__'     => '/static/layui',

],

6、获取项目路径

5.1版本取消了所有的系统常量,原来的系统路径变量改为使用Env类获取:

use think\facade\Env;

// 获取应用目录(不区分大小写)

echo Env::get('app_path');

// 或者

echo Env::get('APP_PATH');

//系统函数

env('root_path') 相当于 /www/wwwroot/ss/

tp5和tp6通用:

app()->getRootPath(); 相当于 env('root_path');

1566193738210102.png

7、获取某个字段或者某个列的值

User::where('id',10)->value('name');

User::where('status',1)->column('id');  <=>  array_column(二维数组,'id');

注意:获取列的值是一个一维数组,以id的值为一维数组的值,没有索引

8、var_dump和halt打印结果分析

var_dump打印的结果是数据类型+数据结果的展示,能展示所有的返回内容

halt打印的结果如果是一个数据集对象,会将该数据集结果显示为数组

如果要判断数据类型,推荐使用var_dump打印结果

9、return

TP框架的return返回数据,能够将数据集为空的对象转化为空数组

10、select

field('sum(price) price') 能直接取求和字段的值

fetchSql()->select() 等于 select(false) 不直接输出,打印SQL语句

11、执行原生SQL进行操作

query 用于查询 其他的用execute

插入记录

$result = Db::execute('insert into sb_ad (ad_name, ad_content ,status) values (1, "456",1)');

更新记录

$result = Db::execute('update sb_ad set ad_name = "framework" where ad_id = 1 ');

查询数据

$result = Db::query('select * from sb_ad where ad_id = 1');

删除数据

$result = Db::execute('delete from sb_ad where ad_id = 2 ');

其它操作

显示数据库列表

$result = Db::query('show tables from tpshop1');

清空数据表

$result = Db::execute('TRUNCATE table sb_ad');

12、where多条件:

tp5.0写法:

$where = ['id' => 1,'name' => 'zhangsan'];

$where['create_time'][] = ['>',$post['startTime']];

tp5.1写法:

$where = [

['id','=',1],

['name','=','张三']

];

$where[] = ['create_tiem','>=',$post['startTime']];

13、根据ID数组获取表里的所有姓名

$ids = [1,2,3,4];

Db::name('user')->where(['id' => $ids])->column('username');

这样就可以根据对应ID数组获取对应的姓名数组了

14、TP自带分页paginate()

paginate方法必须传page和limit参数,否则page永远都是1

不带参数分页:

$list = Db::name('user')->paginate(10);

带参数分页(推荐):

$list = Db::name('user')->paginate(10,false,['query' => request()->param()]);

说明:

['query' => request()->param()],有多少个参数会自动给你加上,不用一个个参数手写上去['query' => ['cate_id' => $cate_id,'keyword' => $keyword]],如果不加参数2和参数3可能会导致搜索条件丢失

15、路由

文件位置:route目录下route.php文件:

Route::rule('reply','index/Index/reply','GET|POST');

说明:第一个参数为域名/参数名,第二个参数为index模块下Index控制器reply方法,第三个参数为请求方法

16、leftJoin连接出现数据增加,有重复数据

是因为join连接的表有一对多的关系,join连接只支持一对一关联

17、session

赋值作用域:session('name','value','作用域');

取值作用域:session('name','','作用域');

删除作用域中的session:session('name',null,'作用域');

清除作用域所有seesion:session(null,'作用域');

18、获取器

模型设置对某字段设置了获取器之后,会在查询之后对数据进行转化

19、模型添加/更新 [ tp6 ]

tp6的save方法如果有where参数则表示更新,没有则表示新增

save新增的时候是默认开启allowField的,自动过滤非数据表中的字段

save更新的时候没有开启allowField

自动识别(推荐使用):

新增:实例化模型调用save

更新:查询数据后调用save

20、模型关联

//一个文章对应多个评论

public function comments()

{

return $this->hasMany(CommentModel::class,'article_id','id');

}

with:将关联表的数据查出来一起返回

(new ArticleModel)->with('comments')->select()->toArray();

如果要对关联模型进行约束(限制关联模型的显示结果),可以使用闭包的方式

(new ArticleModel())->with(['comments' => function($query){

//对关联模型得查询结果进行筛选

$query->where('article_id','>',1);

}])->select()->toArray();

withCount:关联数量统计

(new ArticleModel)->withCount(['comments' => 'comment_count'])->select()->toArray();

has:根据关联数量条件查询当前模型对象

(new ArticleModel)->has('comments','>',2)->select()->toArray();

hasWhere:根据关联模型的条件查询当前模型对象

(new ArticleModel)->hasWhere('comments',['status' => 1])->select()->toArray();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值