入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

yii2中的多表查询

创建时间:2016-07-26 投稿人: 浏览次数:810

数据库

classe表:

CREATE TABLE `classe` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(10) DEFAULT NULL,
  `tid` int(11) DEFAULT NULL,
  PRIMARY KEY (`cid`),
  KEY `FK_ID_CLASS` (`tid`),
  CONSTRAINT `FK_ID_CLASS` FOREIGN KEY (`tid`) REFERENCES `teacher` (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8;

student表:

CREATE TABLE `student` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `sname` varchar(10) DEFAULT NULL,
  `cid` int(11) DEFAULT NULL,
  PRIMARY KEY (`sid`),
  KEY `FK_ID` (`cid`),
  CONSTRAINT `FK_ID` FOREIGN KEY (`cid`) REFERENCES `classe` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

teacher表:

CREATE TABLE `teacher` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `tname` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;


使用gii生成相应的model模型


一对多:hasMany(),第一个参数为class的全名(appmodelsStudent),第二个参数为两个表中对应的字段

一个classe对应多个student

public function getStudents()
{
    $students = self::hasMany(Student::className(), ["cid" => "cid"]);
    return $students;
}
一个teacher对应多个classe
public function getClasses() {
    return $this->hasMany(Classe::className(), ["tid" => "tid"]);
}
一对一:hasOne(),参数同hasMany()方法
一个classe只对应一个教师
public function getT()
{
    return $this->hasOne(Teacher::className(), ["tid" => "tid"]);
}
一个学生对应一个Classe
public function getClasse()
{
    return $this->hasOne(Classe::className(), ["$cid" => "cid"]);
}

controller代码:
</pre><br /><pre name="code" class="php"><span style="white-space:pre">	</span>// 查询班级内所有学生
	public function actionQueryStudentForCid() {
		$cid = Yii::$app->request->get("cid");
		$classe = Classe::findOne($cid);
		// $studnets = $classe->getStudents()->asArray()->all();
		// $studnets = $classe->students;
		$studnets = $classe->getStudents();
		// echo "<pre>";
		// var_dump($studnets);
		// echo "</pre>";

		$dataProvider = new ActiveDataProvider([
			"query" => $studnets,
			"pagination" => [
                "pagesize" => "10"
            ]
		]);

		$data = [
			"flag" => "stu",
			"title" => $cid."号班级内所有学生",
			"dataProvider" => $dataProvider
		];

		return $this->render("index", $data);
	}

	// 查询教师管理的班级
	public function actionQueryClasseForTid() {
		$tid = Yii::$app->request->get("tid");
		$teacher = Teacher::findOne($tid);
		// $studnets = $classe->getStudents()->asArray()->all();
		$classes = $teacher->getClasses();
		// echo "<pre>";
		// var_dump($studnets);
		// echo "</pre>";

		$dataProvider = new ActiveDataProvider([
			"query" => $classes,
			"pagination" => [
                "pagesize" => "10"
            ]
		]);

		$data = [
			"flag" => "cla",
			"title" => $tid."号教师管理的班级",
			"dataProvider" => $dataProvider
		];

		return $this->render("index", $data);
	}






声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。