zoukankan      html  css  js  c++  java
  • ThinkPHP5 Model分层及多对多关联的建立

      笔者最近入手ThinkPHP5,准备用它来实现一个学生作业管理系统。简单的说就是学生在上面交老师布置的课程作业,老师也可以发布修改作业。过程中势必会碰到学生、班级和老师之间的关系。它们之间的关系是多对多的关系。下面我们主要分析班级和作业的关系。每个班级的学生可以有多个作业,同样的作业也可以布置给不同的班级。所以班级和作业之间的关系是多对多的关系。班级表(tb_clas),作业表(tb_task),中间表(tb_task_class)。下面写Model层代码,将Model层细分为logic层、service层、Model层(将数据与逻辑分开)。

    Model层代码如下:

    1.班级(clas.php)

    <?php
    namespace appindexmodel;
    use thinkModel;
    class Clas extends Model
    {
    	public function task()
    	{
    		return $this->belongsToMany('Task','tb_task_clas');
    	}
    }
    

     2.作业(task.php)

    <?php
    namespace appindexmodel;
    use thinkModel;
    class Task extends Model
    {
    	public function clas()
    	{
    		return $this->belongsToMany('Clas','tb_task_clas');
    	}
    
    }
    

      这样班级和作业模型之间的多对多关系就建立了。下面来实现查找某个学生所有被布置的作业列表。这又牵涉到学生表tb_Student,我们在学生模型的logic中来写这个逻辑(将数据与处理分开)

    3.学生模型的Logic层

    <?php
    namespace appindexlogic;
    use thinkModel;
    use appindexmodelClas;
    class Student extends Model
    {
     	//获取学生所在班级的所有作业
    	public function getTasks($stuno)
    	{
    		$stu=$this::get(['stu_no'=>$stuno]);
    		$clas=Clas::get(['clas_id'=>$stu['clas_id']]);
    		return $clas->task;
    	}
    }
    

     这样在controller中实例化该logic后就可以查找任意学生所要做的作业了,Controller中代码如下:

    $stulogic=	hinkLoader::model('Student','logic');
    		$stuno=$request->session('stuno');
    		//dump($stulogic->getTasks($stuno));
    		$tasklist=$stulogic->getTasks($stuno);
    		//dump($tasklist);
    		$this->assign('tasklist',$tasklist);
    

      页面中用一个volist就可以搞定了:

    {volist name="tasklist" id="task"}
                                
                                <li>
                                        <h4>{$task.task_title}</h4>
                                        <p>{$task.task_content}</p>    
                                        
                                </li>
                            {/volist}

     以上就是我用thinkphp5过程中一点经验分享,如果有不妥的地方,欢迎批评指正!

    关注“顶求网”订阅号,获取更多技术文章和教程推送信息

  • 相关阅读:
    使用注解方式实现 AOP和IoC
    代理工厂生成器和顾问包装通知
    多种方式实现AOP
    Spring面试题
    使用集合方式注入IoC
    Spring代理模式
    Spring AOP的使用及案例
    bzoj 1715: [Usaco2006 Dec]Wormholes 虫洞 -- spfa判断负环
    bzoj 1654: [Usaco2006 Jan]The Cow Prom 奶牛舞会 -- Tarjan
    bzoj 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚 -- 线段树
  • 原文地址:https://www.cnblogs.com/nerd/p/6000834.html
Copyright © 2011-2022 走看看