Model分层及多对多涉及的创设

  作者近来起头ThinkPHP5,准备用它来落成一个学童作业管理种类。一言以蔽之就是学生在上头交老师安插的教程作业,老师也足以公布修改作业。进度中势必会碰着学生、班级和师资之间的关联。它们中间的关系是多对多的关系。上边大家重视分析班级和学业的涉及。每个班级的学生可以有三个作业,同样的课业也得以摆放给差距的班级。所以班级和作业之间的涉嫌是多对多的涉嫌。班级表(tb_clas),作业表(tb_task),中间表(tb_task_class)。上边写Model层代码,将Model层细分为logic层、service层、Model层(将数据与逻辑分开)。

Model分层及多对多涉及的创设。  小编日前伊始ThinkPHP5,准备用它来贯彻一个学童作业管理种类。一言以蔽之就是学员在上头交老师安排的课程作业,老师也足以揭破修改作业。进程中势必会遭逢学生、班级和先生之间的关联。它们之间的关系是多对多的关系。下边我们爱慕分析班级和学业的涉嫌。每个班级的学生可以有三个作业,同样的课业也可以摆放给不一致的班级。所以班级和课业之间的涉嫌是多对多的涉及。班级表(tb_clas),作业表(tb_task),中间表(tb_task_class)。下边写Model层代码,将Model层细分为logic层、service层、Model层(将数据与逻辑分开)。

在作业管理种类中,学生登陆到个人基本后得以透过左边的菜系查看自己一度提交的学业和未提交作业。那么在系统中怎样兑现那一个数据的查询的吧?首先大家要求弄清楚学生(Student)、班级(class)、作业提交表(Submit)那七个表之间的关联。

在作业管理连串中,学生登陆到个人焦点后得以经过左边的菜谱查看自己一度交给的功课和未提交作业。那么在系统中怎么样达成那些多少的查询的吗?首先大家须求弄清楚学生(Student)、班级(class)、作业提交表(Submit)那多少个表之间的涉嫌。

Model层代码如下:

Model层代码如下:

  1. 每个学生都属于一个班级

  2. 班级里的各种学生都会被陈设同样的课业

  3. 学员提交作业后会在学业提交表中丰盛响应的笔录,如学生的ID,作业的ID,提交的始末等。

  1. 每个学员都属于一个班级

  2. 班级里的种种学生都会被摆放同样的作业

  3. 学生提交作业后会在学业提交表中添加响应的记录,如学生的ID,作业的ID,提交的情节等。

1.班级(clas.php)

1.班级(clas.php)

可以依照以下步骤获取学生已交作业和未交作业

可以根据以下步骤获取学生已交作业和未交作业

<?php
namespace app\index\model;
use think\Model;
class Clas extends Model
{
 public function task()
 {
  return $this->belongsToMany('Task','tb_task_clas');
 }
}
<?php
namespace app\index\model;
use think\Model;
class Clas extends Model
{
    public function task()
    {
        return $this->belongsToMany('Task','tb_task_clas');
    }
}
  1. 获取学生所在班级的享有作业
  1. 取得学生所在班级的持有作业

 2.作业(task.php)

 2.作业(task.php)

<?php
namespace app\index\model;
use think\Model;
class Task extends Model
{
 public function clas()
 {
  return $this->belongsToMany('Clas','tb_task_clas');
 }

}
<?php
namespace app\index\model;
use think\Model;
class Task extends Model
{
    public function clas()
    {
        return $this->belongsToMany('Clas','tb_task_clas');
    }

}
//获取学生所在班级的所有作业
 public function getTasks($stuno)
 {
  $stu=$this::get(['stu_no'=>$stuno]);
  $clas=Clas::get(['clas_id'=>$stu['clas_id']]);
  return $clas->task;
 }
//获取学生所在班级的所有作业
 public function getTasks($stuno)
 {
  $stu=$this::get(['stu_no'=>$stuno]);
  $clas=Clas::get(['clas_id'=>$stu['clas_id']]);
  return $clas->task;
 }

  那样班级和作业模型之间的多对多关系就建立了。上面来促成查找某个学生具有被摆放的课业列表。这又牵涉到学生表tb_Student,我们在学童模型的logic中来写那一个逻辑(将数据与处理分开)

  那样班级和作业模型之间的多对多涉及就建立了。上面来落到实处查找某个学生具有被摆放的课业列表。这又牵涉到学生表tb_Student,我们在学童模型的logic中来写那个逻辑(将数据与处理分开)

由上述代码课看出,首先根据学号($stuno)获取学生音信,通过学生音信表保存的班级ID(clas_id)再得到学生所在班级新闻,最后经过班级与作业表之间的多对多的关系(详见Thinkphp5官方手册有关模型的涉嫌部分情节),获取该学员所在班级所布署的拥有作业。

由上述代码课看出,首先依据学号($stuno)获取学生音讯,通过学生音讯表保存的班级ID(clas_id)再获得学生所在班级新闻,最终经过班级与作业表之间的多对多的关系(详见Thinkphp5官方手册至于模型的关系部分情节),获取该学员所在班级所布置的享有作业。

3.学生模型的Logic层

3.学员模型的Logic层

 

 

<?php
namespace app\index\logic;
use think\Model;
use app\index\model\Clas;
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;
 }
}
<?php
namespace app\index\logic;
use think\Model;
use app\index\model\Clas;
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;
    }
}

    2. 收获学生未交作业

    2. 拿走学生未交作业

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

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

//获取某学生所有未交作业
 public function getUnSubmitTasks($stuno)
 {
  $stu=$this::get(['stu_no'=>$stuno]);
  $alltask=$this->getTasks($stuno);
  foreach($alltask as $key=>$value)
  {
   if(Submit::get(['task_id'=>$value['task_id'],'stu_id'=>$stu['stu_id']]))
   {
    unset($alltask[$key]);//删除已提交作业
   }
  }
  return $alltask;
  
 }
//获取某学生所有未交作业
 public function getUnSubmitTasks($stuno)
 {
  $stu=$this::get(['stu_no'=>$stuno]);
  $alltask=$this->getTasks($stuno);
  foreach($alltask as $key=>$value)
  {
   if(Submit::get(['task_id'=>$value['task_id'],'stu_id'=>$stu['stu_id']]))
   {
    unset($alltask[$key]);//删除已提交作业
   }
  }
  return $alltask;
  
 }
$stulogic=\think\Loader::model('Student','logic');
  $stuno=$request->session('stuno');
  //dump($stulogic->getTasks($stuno));
  $tasklist=$stulogic->getTasks($stuno);
  //dump($tasklist);
  $this->assign('tasklist',$tasklist);
$stulogic=\think\Loader::model('Student','logic');
        $stuno=$request->session('stuno');
        //dump($stulogic->getTasks($stuno));
        $tasklist=$stulogic->getTasks($stuno);
        //dump($tasklist);
        $this->assign('tasklist',$tasklist);

该函数首先调用获取全体功课的函数($this->getTasks($stuno))得到了学员所在班级的具有作业。这么些数据集是一个二维数组,遍历那几个二维数组,看看那一个二维数组中是还是不是有作业已经被该学员提交到了Submit中,若是提交了就删除该因素。

该函数首先调用获取全体学业的函数($this->getTasks($stuno))得到了学员所在班级的所有作业。这么些数据集是一个二维数组,遍历这一个二维数组,看看那几个二维数组中是不是有作业已经被该学员提交到了Submit中,假使提交了就删除该因素。

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

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

 

 

{volist name="tasklist" id="task"}

                            <li>
                                    <h4>{$task.task_title}</h4>
                                    <p>{$task.task_content}</p>    

                            </li>
                        {/volist}
{volist name="tasklist" id="task"}

                            <li>
                                    <h4>{$task.task_title}</h4>
                                    <p>{$task.task_content}</p>    

                            </li>
                        {/volist}

3.获得学生已交作业

3.得到学生已交作业

 以上就是自我用thinkphp5进程中或多或少经历分享,即便有不妥的地点,欢迎批评指正!

 以上就是自个儿用thinkphp5进度中一些经验分享,要是有不妥的地点,欢迎批评指正!

有了上述三个函数,获取已交作业的事情就变的粗略了,第三个函数得到的二维数组减去第一个函数所重返的数组就是学生已交作业的聚众,做下二维数组的求差即可

有了上述五个函数,获取已交作业的政工就变的简易了,第四个函数得到的二维数组减去第一个函数所再次回到的数组就是学员已交作业的聚集,做下二维数组的求差即可

澳门葡京备用网址 1

//获取某学生所有已交作业(所有作业和未交作业的差集)
 public function getSubmitTasks($stuno)
 {
  $unsubmit=$this->getUnSubmitTasks($stuno);
  $alltasks=$this->getTasks($stuno);
  $submittasks=array();
  foreach ($alltasks as $key=>$value)
  {
   if(!in_array($value,$unsubmit))
   {
    $submittasks[]=$value;
   }
  }
  
  return $submittasks;
 }
//获取某学生所有已交作业(所有作业和未交作业的差集)
 public function getSubmitTasks($stuno)
 {
  $unsubmit=$this->getUnSubmitTasks($stuno);
  $alltasks=$this->getTasks($stuno);
  $submittasks=array();
  foreach ($alltasks as $key=>$value)
  {
   if(!in_array($value,$unsubmit))
   {
    $submittasks[]=$value;
   }
  }
  
  return $submittasks;
 }

关爱“顶求网”订阅号,获取越多技术小说和学科推送新闻

以上就是本身在运用ThinkPHP5建立学生课业管理连串推行中对学员作业列表的解决办法,如若你有更好的法门,欢迎批评指正!

如上就是自身在接纳ThinkPHP5建立学生作业管理种类进行中对学生学业列表的解决办法,如果您有更好的法子,欢迎批评指正!

澳门葡京备用网址 ,本文先发 顶求网,转发请注解来源!

正文头阵 顶求网,转载请申明来源!

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website