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为副表
如果是在info的控制器中需要关联type,例如info表中有个字段type_id关联了type表中的id,那在info对应的model中写法应该改成用belongsTo
这里做一个model层面的延伸:如果type表要关联自己来查询自己类目下的子分类,在type的model中可以这样写
2.在控制器中写查询语句,使用with来关联model中已经绑定好关系的数据表并获取内容
其中where里面的内容是对于$this->model的一个限制语句,如果要对关联表info作条件的筛选,可以在with()里面做一个数组的处理
或者再关联多一个表
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;
}