ThinkPHP模型关联设置允许查询软删除数据
在使用ThinkPHP的模型关联和软删除功能时,我们可能会遇到一些特殊的需求。例如在某些情况下,我们希望关联数据即使已经被软删除,也需要查询出来。此时如果直接使用belongsTo之类的关联方法,查询出来的数据默认过滤了软删除数据。 例如,在获取一篇文章的发布者时,如果对应的用户已被删除,那么关联方法就无法获取对应的发布者信息。如果不想让软删除的用户影响关联结果,那么可以在模型关联中添加removeOption('soft_delete')方法: public function user() { return $this…
2023-11-06ThinkPHP 6 阿里云日志服务日志驱动
think-aliyunsls ThinkPHP 6 阿里云日志服务日志驱动 安装 composer require devsdawn/think-aliyunsls 配置 config/log.php // 默认日志记录通道 'default' => 'aliyunsls', // 日志通道列表 'channels' => [ 'aliyunsls' => [ // 日志记录方式 'type' => 'Aliyunsls', // 阿里云 endpoint 'endpoint' => 'http://cn-beijing.sls.aliyuncs.com/', // 阿里云 AccessKey ID 'access_key_id…
2020-03-16让ThinkPHP 6.0语言包支持多级分组
最近在做一个多语言网站项目,需要给一个多级导航栏编写语言包。虽然ThinkPHP 6.0多语言功能引入了语言分组,但其分组最深只能支持两层,在如我的这种情况下无法满足需要。 可通过修改框架src/think/Lang.php来实现多层级的支持。 在src/think/Lang.php中,替换对应方法: public function has(string $name, string $range = ''): bool { $range = $range ?: $this->range; if ($this->config['allow_group'] && strpos($name, '.')) { $names = e…
2020-02-05ThinkPHP 6 多模型下事务处理
mysql下,事务不是针对某个特定的表或者特定的模型的,因此在多模型的情况下,不需要针对每个模型分别startTrans、commit和rollback。即使模型中有继承startTrans方法,可以通过Model::startTrans();启动事务,但其作用等同于Db:startTrans();。因此可以直接写为以下形式。 通过测试,在出现异常时,通过图中自增值可看出(自增值在rollback时也会增加),三个模型尝试新增数据都被rollback。同时把Table3中的name字段改为test233的操作也没有成功。 <?php namespace app\cont…
2020-01-20ThinkPHP 6.0 实现二级目录多语言功能
建议使用下方文章中的扩展包,它对本文中实现的多语言功能中间件进行了封装,同时计划加入更多相关功能。 前言 ThinkPHP内置了多语言功能,但是它是通过判断URL参数、Cookies、HTTP_ACCEPT_LANGUAGE请求参数来返回语言包的,由于多种语言的URL固定的,在搜索引擎抓取页面时,页面返回哪种语言取决于爬虫所带的请求头,这种方法对SEO有一定的影响,难以全面收录各种语言的版本。例如Google webmaster support的“管理多区域和多语言网站”一文中提及到: Google 建议对每种语言…
2019-08-13