TP5,TP6的一些小知识整理

1.查看当前项目的thinkphp版本

tp5.0 ,版本号是写在/thinkphp/base.php 中,定义 THINK_VERSION;
tp5.1,版本号在/thinkphp/library/think/App.php 中;

2.thinkphp5.1数据库联表查询with的使用

例:在控制器user中联表info进行查询
1.在user的对应model中引入单一对应关系(user表中的id与info表的user_id相对应)
其中user为主表,info为副表
在user的model使用hasOne
如果是在info的控制器中需要关联type,例如info表中有个字段type_id关联了type表中的id,那在info对应的model中写法应该改成用belongsTo
在info的model使用belongsTo
这里做一个model层面的延伸:如果type表要关联自己来查询自己类目下的子分类,在type的model中可以这样写
在type表model中查询下级分类信息

2.在控制器中写查询语句,使用with来关联model中已经绑定好关系的数据表并获取内容
使用with来关联model中已经绑定关系的数据表
其中where里面的内容是对于$this->model的一个限制语句,如果要对关联表info作条件的筛选,可以在with()里面做一个数组的处理
在关联的表info中做一个筛选
或者再关联多一个表
关联表type,需先在model绑定关系

3.快速查找php.ini文件位置

1.Windows下本地:
在php控制器中输入:phpinfo();
输入方法
在页面访问可以得到如下信息:
查询到的信息2.在linux下可以使用bash命令脚本:
sudo find / -name ‘php.ini’
这个语句则会在你整个系统盘中查找php.ini的位置,如果系统很大的话这个可能速度就比较慢,所有如果你确定php.ini是在/etc的话,则可以把bash脚本中的’/'换成“/etc”.

3.各操作系统中php.ini的位置
转,未实践

4 tp5代码中打印sql语句

$list = t h i s − > m o d e l − > w h e r e ( this->model->where( this>model>where(_where1)
->with([‘info’])
->fetchSql(true)
->select();

    其中->fetchSql(true)为直接返回SQL而不是执行查询,dd($list)即可查看到SQL语句

5 变量中带有<br>等html标签,如何让前端识别并显示

$content = Single weight: 69.9g<br/>G/N weight:7.92/8.92kg<br/>Meas: 45.5 x 25 x 26.5 cm<br/>
输出到前端代码:

 <span style="margin-right:10px;">Product size:</span><span>{$content|raw}</span>

在变量后面加上|raw,即可识别变量中的<br>显示换行

6 数据库查询中过滤掉符合某些条件组合的数据

以下方法未实操验证:
去除掉A条件为1,B条件为2的数据
在这里插入图片描述

7 TP6验证器unique复杂条件无效的解决方法

正常验证某个字段在该表是唯一时,可用以下语句:
‘name’ => 'require|unique:user,
此时新增时会验证,编辑时使用该规则会自动传入当前id进行排除后再验证。

而有时候我们的数据表设计比较复杂,官方文档给出的复杂条件验证方法:

// 多个字段验证唯一验证条件
'name'   => 'unique:user,status^account',
// 复杂验证条件
'name'   => 'unique:user,status=1&account='.$data['account'],

可当需要验证name字段(忽略已存在软删除status=0的状态)唯一,使用
‘name’ => 'require|unique:user,status=0,
会提示以下错误:not support data:status=0

新增时需要验证 除了状态不等于0 的用户名的唯一性,可将语句改为:
‘name’ => ‘require|unique:user,name, 0 ,status’,
注:此改法在编辑时如果需要验证唯一性会失效,无法通过传id进行过滤自身的name。

经过验证,同时满足新增时验证排除状态为已删除(status=0)的名称唯一性,编辑时验证排除自身记录的名称后的名称唯一性,需使用以下方式(自定义验证方式uniqueCheck):

	public $rule = [
	'name'   => 'require|uniqueCheck,
	];
	
    // 自定义验证规则
    protected function uniqueCheck($value,$rule,$data=[],$field)
    {
        $where = [['status','<>',0],[$field,'=',$value]];
        array_key_exists('id',$data) ? $where[] = ['id','<>',$data['id']] : '';
        $count = \app\admin\model\User::where($where)->count();
        if($count){
            return false;
        }
        return true;        
    }
	protected $message = [
        'name.require'     => '名称不能为空',
        'name.uniqueCheck'     => '名称已存在',
    ];
	

7 TP6upload上传对文件真实格式的过滤

//上传接口
public function upload() {
 $files = $_FILES['file']['tmp_name'];
 $upload_type=$this->checkFileType($files);
 echo $upload_type;//输出真实格式
}
//返回真实格式
 public function checkFileType($file = '')
    {
        //$file=$_FILE['file']['tmp_name'];
        $limitType = ['3780', '7173', '255216', '13780', '6677', '208207'];
        $fp = fopen($file, "rb");
        $bin = fread($fp, 2); //只读2字节
        fclose($fp);
        // unpack() 函数从二进制字符串对数据进行解包
        $str_info = @unpack("C2chars", $bin);
        //  intval() 函数用于获取变量的整数值
        $type_code = intval($str_info['chars1'] . $str_info['chars2']);
        if (!in_array($type_code, $limitType)) {
           return 'unKnown';
        }
        $file_type = '';
        switch ($type_code) {
            case 3780:
                $file_type = 'pdf';
                break;
            case 7173:
                $file_type = 'gif';
                break;
            case 255216:
                $file_type = 'jpg';
                break;
            case 13780:
                $file_type = 'png';
                break;
            case 6677:
                $file_type = 'bmp';
                break;
            case 8075:
                $file_type = 'docx';
                break;
            case 208207:
                $file_type = 'doc';
                break;
            default :
                $file_type = 'unKnown';
        }
            return $file_type;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值