起风了

“路海长 青夜旷 越过群山追斜阳”

PHP使用递归按层级查找数据

  今天主要介绍一下使用递归来按层级查找数据。原理挺简单的,主要是通过父级id一级一级的循环查找子级,使用PHP循环代码也很容易实现,不过如果层级越多,PHP重复代码也越多,这时可以使用递归来实现这功能。 1、首先查出要使用的数据组成一个数组(避免递归里查询数据库,之后根据这个数组组成自己需...

PHP设计模式之单例模式

  定义: 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。   实现思路: 1、通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问...

Yii2中多表关联查询

    准备条件: 1、首先准备两张表: customer(用户表)(id, name) order(订单表)(id, customer_id, price) customer 表和 order 表之间是一对多的关系,通过 customer_id 字段关联。 2、建立相应的模型文件 customer.php 和 order.php 文件。   关联查询: customer.php文件添加getOr...

如何开启MySQL慢查询日志

  一、开启慢查询日志首先需要了解四个参数: slow_query_log # 是否开启慢查询日志,默认OFF,开启则设置为 ON。 slow_query_log_file # 慢查询日志文件存储位置。 log_queries_not_using_indexes # 是否把没有使用到索引的SQL记录到日志中,默认OFF,开启则设置为 ON。 long_query_time # 超过多少秒...

Yii2中indexBy()的使用

    在项目开发中经常会使用到一些特殊的值作为数组的索引,一般可以先查询出数据后数组循环拼接成所需的格式。不过YII2框架提供了一种更简单的方法indexBy()。 参考Yii文档:https://www.yiichina.com/doc/guide/2.0/db-query-builder 当你在调用all()方法时,它将返回一个以连续的整型数值为索...

YII2中andWhere多个or查询

  使用多个or的复杂查询: AND ((`name`='张三') OR (`name`='李四') OR (`name`='王五')) // AND ((`name`='张三') OR (`name`='李四') OR (`name`='王五'))$query->andWhere(['or', ['name' => '张三'], ['name' => '李四'], ['name' => '王五']]); AND (((name=‘张...

PHP中使用date获取上月最后一天出现的问题

  上次做项目时,发现一个问题,这里记录一下: 问题: 在使用date函数获取上一个月最后一天或下个月最后一天时,如果当前日期是31号,获取的数据有问题。 // 2019-12-01 正确应该是 2019-11-30date('Y-m-d', strtotime('+1 month', strtotime('2019-10-31')));// 2019-10-01 正确应该是 2019-09-3...

使用PHP生成并导出CSV文件

CSV文件是以纯文本形式存储的,一般以逗号为分隔符。这里主要简单介绍下如何导出CSV文件。 一、浏览器导出CSV文件格式 /** * 导出CSV文件 */function exportCsv(){ // 需要导出的内容 $data = [ ['name' => '张三', 'score' => '80'], ['name' => '李四', 'score' => '90']...

YII 中使用 Expression解决查询中带有常量报错的问题

  Yii 官方手册关于 Expression 的解释:https://www.yiichina.com/doc/api/2.0/yii-db-expression Expression 表示不需要转义或引用的 DB 表达式。当表达式对象嵌入到 SQL 语句或片段时, 它将替换为 $expression 属性值,而不进行任何的 DB 转义或引用。 例如,$expression = new Expression('NOW()'...

YII2中配置MySQL读写分离

  在实际开发中,为了服务更好的响应,通常会设置数据库的读写分离,主库负责写入更新等操作,从库负责读操作。 以下是YII2中配置MySQL读写分离,一主多从设置。设置好后,这些从库其中之一将被建立起连接并执行读操作,而主库将被用来执行写操作。 这样的读写分离将通过以下配置自动地完成。 return [...