TP5数据库中什么方法实现无限分类
Admin 2022-06-30 群英技术资讯 681 次浏览
效果:
CREATE TABLE `NewTable` ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT , `pid` int(10) UNSIGNED ZEROFILL NOT NULL , `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `path` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=53 CHECKSUM=0 ROW_FORMAT=DYNAMIC DELAY_KEY_WRITE=0 ;
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>四个字段的无限分类</h1> <form action="{:url('add')}" method="post"> 请选择上级分类:<select name="pid"> <option value="0">顶级分类</option> {foreach $cates as $vo} <option value={$vo.id}>|{$vo.pre}{$vo.name}</option> {/foreach} </select><br/> 请填写分类的名称:<input type="text" name="name"/></br> <input type="submit" value="添加"> </form> </body> </html>
<?php namespace app\index\controller; use think\Db; use think\Controller; use app\model\Category; class Index extends Controller { public function index() { //添加分类的界面 //查询所有的分类 $db=Db::name('categroy'); $data=$db->order('concat(path,"-",id)')->select(); #order('concat(path,"-",id)')自动排序 foreach ($data as &$cate) { $prefix=''; $i=count(explode("-", $cate['path'])); for($n=0;$n<=$i;$n++){ $prefix.="--"; } $cate['pre']=$prefix; } $this->assign('cates',$data); return $this->fetch(); } public function add(){ $db=Db::name('categroy'); if($_POST['pid']==0){ $_POST['path']=0; }else{ $_POST['path']=$db->where('id='.$_POST['pid'])->value('path')."-".$_POST['pid']; } $name=$_POST['name']; if($db->insert($_POST)){ $this->success('添加成功'); }else{ $this->error('添加失败'); } #原理:4个字段 /* ID PID NAME PATH 1 0 服装 0-1 2 0 游戏 0-2 3 1 男装 0-1-3 4 3 上衣 0-1-3-4 */ }}
还有一个没有写完的递归无限分类
public function user(){ $db=Db::name('categroy1'); // $data=$db->getTree(); $opt=$db->getOption($data); $this->assign('opt',$opt); $this->assign('cates',$data); return $this->fetch(); } public function doAdd(){ //执行添加数据 $db=Db::name('categroy1'); if($db->insert()){ $this->success('添加成功',url('index')); }else{ $this->error('添加失败',url('index')); } return $this->fetch(); }
Model
<?php class CategoryModel extends Model{ #通过上级分类的主键id号查询子类 public function getTree($pid=0){ $data=$this->where('pid='.$pid)->select(); foreach($data as &$cate){ #通过该分类的主键id查询该分类的子类 $cate['cates']=$this->getTree($cate['id']); } return $data; } #拼装属性结构 #通过一个数组组装option public function getOption($data){ static $i=0; for($n=0;$n<=$i*2;$n++){ $prefix.="-"; } foreach ($data as $cate) { $opt.="<option value='".$cate['id']."'>".$prefix.$cate['name']."</option>"; #判断该分类下是否包含子类,如果有子类,将数组传入接着拼装 if(!empty($case['cates'])){ $i++; $opt.=$this->getOption($case['cases']); }else{ $i=0; } return $opt; } } }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
PHP Pipeline 实现中间件的示例代码,Pipeline 设计模式,水管太长,只要有一处破了,就会漏水了,而且不利于复杂环境弯曲转折使用。所以我们都会把水管分成很短的一节一节管道,然后最大化的让管道大小作
这篇文章主要介绍PHP中rename函数错误原因级解决方法,有需要的朋友可以继续往下看,希望大家阅读完这篇文章能有所收获,接下来小编带着大家一起了解看看。
thinkphp和laravel是不一样的。thinkphp和laravel虽然都是PHP开发框架,但是有很多区别:1、渲染末班的方式不同,thinkphp用“$this->display()”的方式渲染模版,Laravel使用“return view()”方法;2、Laravel是一个重路由的框架,而thinkphp要有控制器方法才能正常访问。
laravel排序失效的解决办法:1、通过“$query->whereIn(...)”查询数据;2、通过filter过滤数据;3、设置排序好的数据为“$data = $scoutModelsLists;”。
这篇文章主要介绍了PHP获取访问设备信息的方法,结合实例形式分析了php针对访问设备的浏览器类型、浏览器语言、操作系统类型、访客IP、访客地址等相关函数封装与使用技巧,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008