thinkPHP
flysnownet
这个作者很懒,什么都没留下…
展开
-
thinkphp一对多关联,关联预载入带查询条件
thinkphp一对多关联,关联预载入带查询条件,对关联数据进行条件筛选实现方式with中使用匿名函数 传入关联的条件->with([‘times’ => function($query){$query->where(‘type’,2);}])代码 public function times() { return $this->hasMany(ScheduleTime::class); } $res = $原创 2022-03-01 14:58:38 · 1792 阅读 · 0 评论 -
thinkphp,thinkOrm同时使用where跟whereOr错误
keyword:thinkphp where跟whereOr同时使用前言判断时间冲突时用whereOr跟where没法实现想要的效果,后面用原生SQL写了,今天突然想到试试闭包查询,遂测试一番果然可行thinkphp同时使用where和whereOr,本意是两个条件and并列查询,但实际上两个条件之间会用OR连接错误写法如下$map1 = [['start_time', '>', $startTime], ['start_time', '<', $endTime]];原创 2021-09-15 18:08:38 · 688 阅读 · 0 评论 -
thinkphp追加输出数据库没有的不存在的字段
thinkphp追加数据库没有的字段有时需要在输出字段里添加一个数据库中不存在的字段,这时可以使用模型的append方法实现代码示例public function getCurrentTimeAttr($value,$data) { return time(); } public function list($size = 10, $page = 1, $where = null) { $list = $this原创 2021-07-13 09:19:30 · 1247 阅读 · 0 评论 -
thinkphp,mysql关联查询排除相同的数据,排除指定的数据
keyword:thinkphp,mysql关联查询联合查询排除相同的数据,排除指定的数据,排除重复另一张表数据如查询可以分配给当前用户的角色,要排除该用户已经拥有的角色表结构DROP TABLE IF EXISTS `role`;CREATE TABLE `role` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', `role_name` varchar(50) NOT NULL DEFAULT原创 2021-04-13 14:46:45 · 946 阅读 · 0 评论 -
thinkphp5 thinkOrm model模型__construct构造函数
thinkphp 模型 model类中使用构造函数错误如下使用构造函数会导致没有数据use think\Model;class Member extends Model{ protected $validate; protected $autoWriteTimestamp = true;//自动时间戳 public function __construct() { parent::__construct(); .原创 2021-03-24 15:48:52 · 609 阅读 · 0 评论 -
php避免循环查询数据库优化一对多查询
列表查询中一对多查询循环查询优化,mysql循环查询优化描述比如查询学生列表,每一行需要包含该学生的家长列表,一个学生对应多个家长。循环查询方式先查出学生列表,再循环查询对应的家长列表,需要查询N+1次但在循环中查询数据不但效率低下而且对数据库造成很大对压力,当循环次数多的时候,一方面会造成严重的网络延迟,一方面可能会连接数据库失败,在开发中应该尽量避免在循环里查询数据库优化方案使用关联查询联合查询所有数据行,再循环处理按学生归类,查询次数1示例代码$list =原创 2021-03-02 16:23:54 · 757 阅读 · 0 评论 -
thinkphp结果集判空isEmpty
thinkphp结果集判空isEmpty使用select查询多条数据结构可以得到的是结果集可以使用isEmpty判空当使用find,get获取到的是单条,不支持isEmpty所以多条数据用isEmpty单挑直接empty()原创 2020-12-29 14:57:37 · 1052 阅读 · 0 评论 -
thinkphp软删除验证器获取$data数据,自定义验证,多条件唯一性验证unique验证
thinkphp验证器获取$data数据,自定义验证,多条件唯一性验证,软删除验证唯一性,unique验证问题描述项目中使用软删除,数据删除后验证器里唯一性验证不通过,需要字节拼接条件如下// 复杂验证条件'name' => 'unique:user,status=1&account='.$data['account'],但是默认rule规则里不能直接获取到$data解决方法使用自定义验证拿到$data再验证唯一性代码class Teacher .原创 2020-12-23 11:55:16 · 704 阅读 · 0 评论 -
thinkphp 模型name属性字段冲突
thinkphp 模型属性字段冲突,name ,table ,pk冲突10501,SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lesson.' doesn't exist在模型中,获取属性name,pk,table时,与数据表中的字段冲突比如获取name字段$info = $this->get(1);$info->name这里获取的到name是当前的模型类名而不是字段名解决方法获取是使用获取原创 2020-12-18 14:32:58 · 1144 阅读 · 0 评论 -
thinkphp唯一性验证器unique编辑修改数据时提示重复
thinkphp唯一验证器修改时验证错误问题thinkPHP使用unique验证器新增数据没问题,但是编辑数据时提示重复验证规则如下protected $rule = [ 'name' => 'require|max:50', 'role_id' => 'number', 'mobile' => 'mobile|unique:teacher', ];查看日志验证时执行的sql如原创 2020-11-30 12:04:04 · 1716 阅读 · 0 评论 -
php捕捉Warning、Notice错误
介绍php中try catch 无法捕捉到Warning、Notice错误解决方法1.注册错误处理函数来全局捕捉,缺点,不能try catch马上捕捉到,进行处理set_error_handler([__CLASS__, 'error']);set_exception_handler([__CLASS__, 'exception']);register_shutdown_function([__CLASS__, 'shutdown']);set_error_handler原创 2020-09-04 10:22:19 · 11681 阅读 · 0 评论 -
PHP封装异常类,注册错误和异常处理机制
PHP 注册错误和异常处理机制介绍全局捕捉异常错误,并记录到日志系统代码<?phpnamespace lib;use Exception;class Error{ /** * 配置参数 * @var array */ protected static $exceptionHandler; /** * 注册异常处理 * @access public * @return void原创 2020-09-02 17:26:04 · 4638 阅读 · 0 评论 -
thinkphp5使用数据库表锁
tp5数据库锁的使用Lock方法是用于数据库的锁机制,如果在查询或者执行操作的时候使用:Db::name('user')->where('id',1)->lock(true)->find();就会自动在生成的SQL语句最后加上FOR UPDATE或者FOR UPDATE NOWAIT(Oracle数据库)。lock方法支持传入字符串用于一些特殊的锁定要求,例如:Db::name('user')->where('id',1)->lock('lock i.原创 2020-09-02 14:15:30 · 4802 阅读 · 0 评论 -
php利用__callStatic静态调用同类中非静态方法
描述:php静态调用非静态方法场景:项目中将请求参数一到达就实例化封装为request类,想在业务其他地方通过Request::ip()静态方式获取数据实现方式想到了两种,其一,利用反射机制做静态代理,将当前实例化对象反射出来,获取到相关数据示例$request = new Request($message); $getFileMethod = (new \ReflectionObject($request))->getMethod($method).原创 2020-08-25 18:35:43 · 3710 阅读 · 0 评论 -
小程序接口签名及PHP验签
签名算法所有参数按字典序排序后用&连接,然后拼接上&key='value',做MD5小程序生成签名sign.jsvar m = require("./md5.js");function sort(data){ var keys = Object.keys(data).sort(); var result = {}; for(var i = 0; i < keys.length; i++){ var key = keys[i原创 2020-07-18 14:15:09 · 4684 阅读 · 0 评论 -
tp5获取不到Authorization以及获取参数时有路由信息
tp5获取不到Authorization以及获取参数时有路由信息用$request->param()获取到的参数包含/getlist等路由信息解决方法修改.htaccess<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILE.原创 2020-07-18 14:05:32 · 790 阅读 · 0 评论 -
同目录下 thinkphp Fatal error: Class ‘app\admin\Controller\Base‘ not found in
错误信息 Fatal error: Class 'app\admin\Controller\Base' not found in /www/wwwroot/weball/gclw_server/application/admin/controller/Option.php on line 15项目中所有控制器继承了同目录Base控制器,有的会出现找不到base,需要use下base,有的...原创 2020-01-06 15:32:56 · 7758 阅读 · 0 评论 -
PHP获取多级树形菜单,无限极分类树形菜单
level代表菜单级别,前端根据此控制缩进pid 上级分类id代码PHP查询数据库中所有菜单,进行排序public function getCatalogTree() { $list = $this->select(); return $this->sort($list); } public funct...原创 2019-12-26 14:42:19 · 9918 阅读 · 0 评论 -
PHP获取网址URL路径中文件名
basename函数basename—返回路径中的文件名部分说明basename(string$path[,string$suffix] ) :string给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。参数path一个路径。在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符。在其它环境下是斜线(/)。...原创 2019-12-23 13:38:00 · 4658 阅读 · 0 评论 -
php使用redis键空间通知实现定时任务延迟消息队列
键空间通知(keyspace notification)原理:1.保存数据到redis的时候给键设置过期时间2.当redis键过期时会给订阅者发送事件消息,3.在回调事件获取到过期的键名,执行定时任务示例redis配置修改 redis.confnotify-keyspace-events 的参数为 “Ex”然后重启redis服务打开一个客户端新增一...原创 2019-07-01 16:16:38 · 28064 阅读 · 0 评论 -
tp5使用workerman实现微信扫码登录,微信公众号关注登录
引言本篇介绍的二维码登录不是微信开发平台的二维码登录,而是利用微信公众号临时二维码扫码事件关注公众号进行登录注册,浏览器判断扫码状态有两种方式,第一种是ajax每隔一秒进行轮询,如果用户扫码了则后台给个成功状态第二种是进入页面后链接websocket等待服务器主动通知,优缺点分析:轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。优点...原创 2019-07-19 11:58:42 · 26520 阅读 · 1 评论 -
PHP网站配置(系统设置)数据库表结构及实现
网站后台一般少不了站点配置,一种方式是写到配置文件里,第二种是写到数据库,下面以写到数据库为例数据库表结构DROP TABLE IF EXISTS `option`;CREATE TABLE `option` ( `option_name` varchar(64) NOT NULL DEFAULT '' COMMENT '配置名', `option_value` varchar...原创 2019-07-17 12:49:01 · 13969 阅读 · 0 评论 -
TP5随机获取数据库数据
代码 public function getLikeList($catalog_id,$size = 20){ $res = $this ->field('id,title') ->where('catalog_id',$catalog_id) ->orderRaw("RAND()")...原创 2019-07-23 10:58:37 · 16593 阅读 · 0 评论 -
PHP7常量const修饰符syntax error, unexpected ‘const‘ (T_CONST), expecting variable (T_VARIABLE)
错误代码语法解析错误: syntax error, unexpected 'const' (T_CONST), expecting variable (T_VARIABLE)代码class Psr16Cache implements CacheInterface, PruneableInterface, ResettableInterface{ use ProxyTr...原创 2019-08-01 16:52:22 · 31594 阅读 · 1 评论 -
php使用PHPAnalysis提取关键字中文分词
需求:做SEO的keywords时,需要从标题或者正文里提取关键字1.PHPAnalysis下载地址http://www.phpbone.com/phpanalysis/#api原下载地址打不开,已上传到githubhttps://github.com/feixuekeji/PHPAnalysis下载后解压放到extend目录下(以tp5为例,其他目录也行)2....原创 2019-08-19 11:22:51 · 23819 阅读 · 5 评论 -
tp5使用workerman实现异步任务
问题描述:采集数据时过程很慢,导致无法继续进行其他任务,,避免主业务被长时间阻塞,故而将其提交给异步任务,当任务完成通知客户端即可流程前端业务:由于本系统采用iframe结构,为避免点击其他页面业务中断,所以业务在父页面执行,1.用户在子页面点击采集按钮调用父级方法function to_collect(ids) { window.parent.start...原创 2019-08-20 10:58:13 · 13513 阅读 · 4 评论 -
thinkphp5 layui分页样式
tp5之layui分页样式1.分页类路径:\thinkphp\library\think\paginator\driverLayui.php<?phpnamespace think\paginator\driver;use think\Paginator;class Layui extends Paginator{ /** * 上一页按钮 ...原创 2019-09-02 13:23:08 · 11145 阅读 · 0 评论 -
微信小程序注册登录获取用户信息thinkPHP5
需求 :小程序使用微信登录,后端获取用户详细(包含openid,unionid)写入数据库,并生成token小程序登录获取token1.通过wx.login获取到code,2.wx.getUserInfo 获取到加密数据encryptedData ,及iv ,3.将数据发送到后台换取token小程序代码var that = this; wx.getSetting({...原创 2019-09-30 14:27:06 · 9055 阅读 · 0 评论 -
thinkphp5拼接数组查询条件
方式一直接传入数组$where = array(); if (!empty($status)) $where[] = array('status', '=', $status); if (!empty($auid)) $where[] = array('auid', '=', $auid);::相同的字段...原创 2019-06-25 16:30:01 · 14579 阅读 · 0 评论