1、数据库查询中execute和query方法的区别
tp中execute()和query()方法都可以在参数里直接输入sql语句。
但是不同的是execute()通常用来执行insert或者update等sql语句,而query常用来执行select等语句。
execute()方法将返回影响的记录数,如果执行sql的select语句的话,返回的结果将是表的总记录数。
2、tp5 Hook的用法
添加钩子:
// 闭包 Hook::add('t123', function (){ echo 123; }); // 第二个参数是类名,tag是方法名 Hook::add('t123', estHook::class); // 调用 estHook类的test方法 (静态方法) Hook::add('t123', ' estHook::test'); // 调用 estHook类的tt方法 Hook::add('t123', [ estHook::class, 'tt']); // 调用 estHook类的fuck方法,不存在则调用run方法 Hook::add('fuck', estHook::class);
3、tp5 验证器使用回调进行验证
1 namespace appapivalidate; 2 3 use thinkValidate; 4 5 class Test extends Validate 6 { 7 public function __construct(array $rules = [], array $message = [], array $field = []) 8 { 9 parent::__construct($rules, $message, $field); 10 $this->rule['test'] = function ($value) { 11 return $this->message['test']; 12 }; 13 } 14 15 protected $message = [ 16 'test' => 'just a test hahahhhhh', 17 ]; 18 }
在构造函数里面添加rule的原因是,类变量$rule里面的值不可以传闭包进行初始化。
闭包返回值:返回true表示验证成功,或者返回字符串(错误失败,这时返回的将会是错误信息,使用getError()方法将会获取到该信息)
4、在基础控制器或者_initialize方法里面判断不登陆的时候返回
hinkResponse::create(json())->send() ; die;
5、field方法排除字段
field(['id','status','sort_index','create_time','update_time'], true)
第一个参数是要排除的字段数组,第二个参数传true代表是排除的字段。
6、thinkphp模型数据分页
$category = Category::first(); $apps = $category->apps()->paginate(10); return view('example', compact('category', 'apps'));
上面的apps是个hasMany关联。
7、读取配置的时候把一个文件加载到config中,文件名为配置的key
Config::load($filename, pathinfo($file, PATHINFO_FILENAME));
8、关联模型更新的时候,提示主键id找不到的错误
比如Order表,里面保存了用户id,定义了user关联,但是使用$order->user->save()的时候提示Order的属性id不存在,
这是因为在Order模型的$field中没有写入主键"id",导致查询出来的order没有带id。
9、使用union同时分页的解决方法之一:使用union创建视图