yii2中的多表查询
数据库
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);
}- 上一篇:没有了
- 下一篇: yii2的事务处理
