今天主要介绍一下使用递归来按层级查找数据。原理挺简单的,主要是通过父级id一级一级的循环查找子级,使用PHP循环代码也很容易实现,不过如果层级越多,PHP重复代码也越多,这时可以使用递归来实现这功能。
1、首先查出要使用的数据组成一个数组(避免递归里查询数据库,之后根据这个数组组成自己需...
定义:
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
实现思路:
1、通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问...
准备条件:
1、首先准备两张表:
customer(用户表)(id, name)
order(订单表)(id, customer_id, price)
customer 表和 order 表之间是一对多的关系,通过 customer_id 字段关联。
2、建立相应的模型文件 customer.php 和 order.php 文件。
关联查询:
customer.php文件添加getOr...
一、开启慢查询日志首先需要了解四个参数:
slow_query_log # 是否开启慢查询日志,默认OFF,开启则设置为 ON。
slow_query_log_file # 慢查询日志文件存储位置。
log_queries_not_using_indexes # 是否把没有使用到索引的SQL记录到日志中,默认OFF,开启则设置为 ON。
long_query_time # 超过多少秒...
在项目开发中经常会使用到一些特殊的值作为数组的索引,一般可以先查询出数据后数组循环拼接成所需的格式。不过YII2框架提供了一种更简单的方法indexBy()。
参考Yii文档:https://www.yiichina.com/doc/guide/2.0/db-query-builder
当你在调用all()方法时,它将返回一个以连续的整型数值为索...
使用多个or的复杂查询:
AND ((`name`='张三') OR (`name`='李四') OR (`name`='王五'))
// AND ((`name`='张三') OR (`name`='李四') OR (`name`='王五'))$query->andWhere(['or', ['name' => '张三'], ['name' => '李四'], ['name' => '王五']]);
AND (((name=‘张...
上次做项目时,发现一个问题,这里记录一下:
问题:
在使用date函数获取上一个月最后一天或下个月最后一天时,如果当前日期是31号,获取的数据有问题。
// 2019-12-01 正确应该是 2019-11-30date('Y-m-d', strtotime('+1 month', strtotime('2019-10-31')));// 2019-10-01 正确应该是 2019-09-3...
CSV文件是以纯文本形式存储的,一般以逗号为分隔符。这里主要简单介绍下如何导出CSV文件。
一、浏览器导出CSV文件格式
/** * 导出CSV文件 */function exportCsv(){ // 需要导出的内容 $data = [ ['name' => '张三', 'score' => '80'], ['name' => '李四', 'score' => '90']...
Yii 官方手册关于 Expression 的解释:https://www.yiichina.com/doc/api/2.0/yii-db-expression
Expression 表示不需要转义或引用的 DB 表达式。当表达式对象嵌入到 SQL 语句或片段时, 它将替换为 $expression 属性值,而不进行任何的 DB 转义或引用。 例如,$expression = new Expression('NOW()'...
在实际开发中,为了服务更好的响应,通常会设置数据库的读写分离,主库负责写入更新等操作,从库负责读操作。
以下是YII2中配置MySQL读写分离,一主多从设置。设置好后,这些从库其中之一将被建立起连接并执行读操作,而主库将被用来执行写操作。 这样的读写分离将通过以下配置自动地完成。
return [...