thinkphp相关

网友投稿 252 2022-11-07

thinkphp相关

thinkphp相关 1.thinkphp调试sql方法:echo M("table_name")->getLastSql(); 2. 条件查询设置多个条件参数的写法: (1). $result = M("table_name")->where(array("cloumns_name"=>$cloumns_value,"cloumns2_name"=>$cloumns_value2))->find();

thinkphp相关1.thinkphp调试sql方法:echo M("table_name")->getLastSql(); 2. 条件查询设置多个条件参数的写法:(1). $result = M("table_name")->where(array("cloumns_name"=>$cloumns_value,"cloumns2_name"=>$cloumns_value2))->find();(2). $query = array();$query["cloumns_value1"]= array('eq', $cloumns_value1 );$query["cloumns_value2"]= array('neq', $cloumns_value2 ); $result = M("table_name")->where($query)->select();3.插入数据$data = array("group_goods_detail_goods_id"=>intval($combine_goods_info["goods_id"]),"goods_id"=>intval($goods_Info["goods_id"]));M("group_goods_detail")->query("INSERT INTO `adm_group_goods_detail` (`group_goods_detail_goods_id`, `goods_id`) values('".$data[group_goods_detail_goods_id]."','".$goods_Info["goods_id"]."')"); $result = GoodsModel::addGoods($basicInfo);=======================================================\ThinkPHP\Conf\convention.php'DB_PREFIX' => 'adm_', // 数据库表前缀thinkphp中->table,->join 等函数里可以使用__PLATE_TYPE__ 会自动添加前缀转换成adm_plate_type注意:字符串的条件不会自动转换的,必须用全表名,如:->order('adm_recommend_house.order_num ') table方法指定的数据表需要完整的表名,但可以采用下面的方式简化数据表前缀的传入,例如:$Model->table('__USER__')->where('status>1')->select();= array('表达式','查询条件1');$map['字段2'] = array('表达式','查询条件2');$Model->where($map)->select(); // 也支持表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:表达式含义EQ 等于(=)NEQ 不等于(<>)GT 大于(>)EGT 大于等于(>=)LT 小于(<)ELT 小于等于(<=)LIKE 模糊查询[NOT] BETWEEN (不在)区间查询[NOT] IN (不在)IN 查询EXP 表达式查询,支持SQL语法多次调用where方法支持多次调用,但字符串条件只能出现一次,例如:$map['a'] = array('gt',1);$where['b'] = 1; $Model->where($map)->where($where)->where('status=1')->select();多次的数组条件表达式会最终合并,但字符串条件则只支持一次。 ====================================================== //实例化空模型$Model = new Model();//或者使用M快捷方法是等效的$Model = M();//进行原生的SQL查询$Model->query('SELECT * FROM think_user WHERE status = 1'); $config = M('Config')->getField('name,value'); ThinkPHP模型基础类提供的连贯操作方法(也有些框架称之为链式操作),可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作。使用也比较简单, 假如我们现在要查询一个User表的满足状态为1的前10条记录,并希望按照用户的创建时间排序 ,代码如下:$User->where('status=1')->order('create_time')->limit(10)->select();这里的where 、order 和limit 方法就被称之为连贯操作方法,除了select方法必须放到最后一个外(因为select方法并不是连贯操作方法),连贯操作的方法调用顺序没有先后,例如,下面的代码和上面的等效:$User->order('create_time')->limit(10)->where('status=1')->select();如果不习惯使用连贯操作的话,还支持直接使用参数进行查询的方式。例如上面的代码可以改写为:$User->select(array('order'=>'create_time','where'=>'status=1','limit'=>'10'));使用数组参数方式的话,索引的名称就是连贯操作的方法名称。其实不仅仅是查询方法可以使用连贯操作,包括所有的CURD方法都可以使用,例如:$User->where('id=1')->field('id,name,email')->find();$User->where('status=1 and id=1')->delete();连贯操作通常只有一个参数,并且仅在当此查询或者操作有效,完成后会自动清空连贯操作的所有传值(有个别特殊的连贯操作有多个参数,并且会记录当前的传值)。简而言之,连贯操作的结果不会带入以后的查询。 ========================================================// 关闭字段缓存'DB_FIELDS_CACHE'=>false注意:调试模式下面由于考虑到数据结构可能会经常变动,所以默认是关闭字段缓存的。如果需要显式获取当前数据表的字段信息,可以使用模型类的getDbFields方法来获取当前数据对象的全部字段信息,例如:$User = M('User');$fields = $User->getDbFields();如果你在部署模式下面修改了数据表的字段信息,可能需要清空Data/_fields 目录下面的缓存文件,让系统重新获取更新的数据表字段信息,否则会发生新增的字段无法写入数据库的问题。如果不希望依赖字段缓存或者想提高性能,也可以在模型类里面手动定义数据表字段的名称,可以避免IO加载的效率开销,例如:namespace Home\Model;use Think\Model;class UserModel extends Model {protected $fields = array('id', 'username', 'email', 'age');protected $pk = 'id';}pk 属性定义当前数据表的主键名,默认值就是id,因此如果是id的话可以无需定义。如果你的数据表使用了复合主键,可以这样定义:namespace Home\Model;use Think\Model;class ScoreModel extends Model {protected $fields = array('user_id', 'lession_id','score');protected $pk = array('user_id','lession_id');} =======================================================Thinkphp关闭缓存方法/ThinkPHP/Conf目录下debug.php中'TMPL_CACHE_ON'=>false, // 默认开启模板缓存convention.php中'TMPL_CACHE_ON' => false, // 默认开启模板编译缓存 false 的话每次都重新编译模板'ACTION_CACHE_ON' => false, // 默认关闭Action 缓存'HTML_CACHE_ON' => false, // 默认关闭静态缓存'DB_FIELD_CACHE'=>false, //关闭全部缓存按照网上方法在debug.php、convention.php中配置还是不行,引人页面修改内容还是会缓存。 必须在对应Application里面的Conf/config.php里面配置下面内容才能彻底关闭缓存 return array('TMPL_CACHE_ON' => false,'ACTION_CACHE_ON' => false,'HTML_CACHE_ON' => false,'DB_FIELD_CACHE' => false);=======================================================添加权限控制步骤(没有权限的提示系统异常跳转回去):1.在按钮处增加xxxxx权限判断代码,没有权限不显示对应按钮。 2.系统管理>>系统管理>>菜单管理 搜索对应菜单名称,新增菜单权限项目 :菜单权限名称:对应菜单名称菜单权限代码:对应checkRole 方法里面的代码,可以控制器名称一致关联模块名: 关联控制器名: 对应功能方法: 后面三个分别为对应请求URL的路径名称 如:/Dependency/GoodsCombineManager/modify 3.在后台系统管理>>系统管理>>角色管理 对应用户组勾选上新增的权限并保存。========================================================删除有外键关联表的数据处理逻辑:public function doDelete(){$ids = I('post.ids', null);$arrIds = explode(',', $ids);$id_count = count($arrIds);for ($i=0; $i<$id_count; $i++){$curId = $arrIds[$i];$result = M("goods")->where(array("goods_id"=>$curId))->find();//->select();多行记录//$mgs= M("goods")->getLastSql();$goods_status = $result["goods_status"];//1启用,2禁用if($goods_status == 1){$this->ajaxReturn(array("status"=>1,"message"=>"组合商品为已生效状态不可删除"//.$mgs));return;}}//选择的id全部都为禁用时才删除,先删除关联属性才能删除组合商品for ($i=0; $i<$id_count; $i++){$curId = $arrIds[$i];//删除商品属性M("goods_properties_detail")->where(array("goods_id"=>$curId))->delete();//删除可销售商品,添加组合商品时,自动添加的可以删除M("goods_saler")->where(array("goods_id"=>$curId))->delete();}$this->_before_delete();// echo M("goods")->getLastSql();echo json_encode($this->deleteResult);} public function buildDeleteRestrictChecks(){return array('model'=>'goods','idField'=>'goods_id','uniqueNameField' => 'goods_name','uniqueNameText' => '商品名称','relations'=>array(// array('model'=>'goods_properties_detail', 'relatedField'=>'goods_id', 'errMessage'=>'商品下有商品属性信息'),// array('model'=>'group_goods_detail','relatedField'=>'goods_id','errMessage'=>"这个组合商品下多个商品"),));}=========================================================$querys["state"] = 1;$querys["rtype"] = $rtype;$solutions = M('recommend_solution')->where( $querys)->order('order_num')->field('design_solution_no')->select();$design_solution_nos = array();foreach ($solutions as $k=>$val){// array_push($design_solution_nos, $val['design_solution_no']);$design_solution_nos[] = $val['design_solution_no'];}$querys2["design_solution_no"] = array("in",$design_solution_nos);//design_solution_no,design_solution_title,design_solution_major_thumb,actual_inside_area,design_solution_tw4,design_solution_tw4_name,house_name,building_name$Parray =M("design_solution")->where($querys2)->select(); ==========================================================怎样在thinkphp里面执行原生的sql语句$Model = new Model();//或者 $Model = D(); 或者 $Model = M();$sql = "select * from `order`";$voList = $Model->query($sql);只是需要new一个空的模型继承Model中的方法。注意query是查功能,execute是增删改功能-----------------------------------------------tP的模型可以支持原生SQL操作,提供了query和execute两个方法,为什么原生SQL还要区分两个方法呢,原因有两个:1、返回类型不同query用于查询,返回的是数据集,和select或者findall一样,所以可以直接在模板里面使用volist标签输出query的查询结果execute用于写操作,返回的是状态或者影响的记录数 2、读写统计需要为了便于统计当前的数据读写次数,把数据库的读和写操作分开(对应的就是query和execute)使用原生SQL很简单,我们甚至不需要实例化任何的模型,例如:$Model = new Model(); // 实例化一个空模型下面的方法是等效的$Model = D(); 或者 $Model = M();// 下面执行原生SQL操作$Model->query('select * from think_user where status=1');$Model->execute('update think_user set status=1 where id=1');如果你实例化了某个模型,仍然可以执行原生SQL操作,不受影响,例如:$User = D('User');$User->query('select * from think_user where status=1');$User->execute('update think_user set status=1 where id=1'); 在这种情况下面,我们可以简化SQL语句的写法,例如:$User->query('select * from __TABLE__ where status=1');$User->execute('update __TABLE__ set status=1 where id=1');系统会自动把__TABLE__替换成当前模型对应的数据表名称,实际的数据表由模型决定。通常来说,我们都是使用原生SQL操作实现一些ORM和CURD比较难实现的操作,另外,如果SQL不复杂的话 原生SQL的效率和连贯操作的效率差别是微乎其微的,TP本身的ORM实现也是相当高效的。 ==========================================================JOINJOIN方法也是连贯操作方法之一,用于根据两个或多个表中的列之间的关系,从这些表中查询数据。join通常有下面几种类型,不同类型的join操作会影响返回的数据结果。INNER JOIN: 等同于 JOIN(默认的JOIN类型),如果表中有至少一个匹配,则返回行LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行FULL JOIN: 只要其中一个表中存在匹配,就返回行join方法可以支持以上四种类型,例如:$Model = M('Artist');$Model->join('think_work ON think_artist.id = think_work.artist_id')->join('think_card ON think_artist.card_id = think_card.id')->select();join方法支持多次调用,但指定的数据表必须是全称,但我们可以这样来定义: $Model->join('__WORK__ ON __ARTIST__.id = __WORK__.artist_id')->join('__CARD__ ON __ARTIST__.card_id = __CARD__.id')->select();__WORK__ 和 __CARD__ 在最终解析的时候会转换为 think_work 和 think_card 。默认采用INNER JOIN 方式,如果需要用其他的JOIN方式,可以改成$Model->join('RIGHT JOIN __WORK__ ON __ARTIST__.id = __WORK__.artist_id')->select();或者使用:$Model->join('__WORK__ ON __ARTIST__.id = __WORK__.artist_id','RIGHT')->select();join方法的第二个参数支持的类型包括:INNER LEFT RIGHT FULL。如果join方法的参数用数组的话,只能使用一次join方法,并且不能和字符串方式混合使用。 例如:join(array(' __WORK__ ON __ARTIST__.id = __WORK__.artist_id','__CARD__ ON __ARTIST__.card_id = __CARD__.id'))使用数组方式的情况下,第二个参数无效。因此必须在字符串中显式定义join类型,例如:join(array(' LEFT JOIN __WORK__ ON __ARTIST__.id = __WORK__.artist_id','RIGHT JOIN __CARD__ ON __ARTIST__.card_id = __CARD__.id')) ===================================================JavaScript parseInt() 函数parseInt("10");//返回 10parseInt("19",10); //返回 19 (10+9),后面的10表示10进制 var ctype = {$ctype};改成var ctype = parseInt("{$ctype}");解决ThinkPHP模版传值{$ctype}这种写法在Dreamweaver报错的问题===================================================thinkphp里try catch问题catch (Exception $e)会报错,php名字空间要求要改成 catch (\Exception $e) =======================================ThinkPHP模板中使用U方法时无法嵌套大括号需要在control里面用U方法赋值给变量传到模版如:{:U('/Blog/comment/',array('id'=>$id)}$comment_url = U('/Blog/comment/',array('id'=>$id));$this->assign('comment_url', $comment_url);模版使用:xxx ==========================================================  更多内容以后添加

大自然,飘然的风,QQ群: python技术交流群:453879716,人工智能深度学习群:251088643 golang技术交流群:316397059,vuejs技术交流群:458915921

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在AWS上实施无服务器微服务架构
下一篇:借用vimquickui与coc.nvim搞事情
相关文章

 发表评论

暂时没有评论,来抢沙发吧~