php – 使用Yii2中的关系加入多个表

前端之家收集整理的这篇文章主要介绍了php – 使用Yii2中的关系加入多个表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过使用关系通过yii2中的Kartik GridView小部件列出一些数据.
我有这些表
  1. staffs
  2.  
  3. CREATE TABLE IF NOT EXISTS `staffs` (
  4. `id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(250) CHARACTER SET utf8 DEFAULT NULL,`department_id` int(11) DEFAULT NULL,`designation_id` int(11) DEFAULT NULL,`username` varchar(50) CHARACTER SET utf8 DEFAULT NULL,`emailid` varchar(250) CHARACTER SET utf8 DEFAULT NULL,`staffrights` tinyint(2) DEFAULT '0',`staffstatus` tinyint(2) DEFAULT '1',PRIMARY KEY (`id`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  6. designations
  7.  
  8. CREATE TABLE IF NOT EXISTS `designations` (
  9. `id` int(11) NOT NULL AUTO_INCREMENT,`designname` varchar(150) NOT NULL,`designation_group_id` varchar(250) NOT NULL,PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  11.  
  12.  
  13.  
  14. designation_group
  15.  
  16.  
  17. CREATE TABLE IF NOT EXISTS `designation_group` (
  18. `id` int(11) NOT NULL AUTO_INCREMENT,`group_name` text NOT NULL,PRIMARY KEY (`id`)
  19. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

名称表通过designations.designation_group_id与designation_group相关.名称表将具有一个或多个以逗号分隔的值:designation_group.id.

名称表与staffs.designation_id = designations.id的员工表相关.
在员工模型中我添加了这样的关系

  1. public function getDesignations() {
  2. return $this->hasOne( Designations::className(),['id' => 'designation_id']);
  3. }

并且工作正常.但是我之所以尝试这样的关系是这样的:

  1. public function getDesgroupstaffs(){
  2. return $this->hasOne(Designations::className(),['id' => 'id'])
  3. ->from(Designationgroup::tableName() ) ;
  4. }

但它没有给出预期的结果.
如何加入designation_group表,以便还可以显示与员工相关的所有指定组?
我想表示,网格视图的第一列将是名称,而同一列的过滤器应该是DesignationGroup.group_name.因此,如果选择了任何group_name,它将显示与该组名相关联的人员数据

好吧,从我能够从您的问题中提取内容,您希望能够获得每个员工的组名.下面的代码将帮助您完成该任务.

在员工模型中,创建如下所述的关系,或者您可以使用现有的关系,我相信Yii会自动为您生成

员工模型

  1. public function getDesignation()
  2. {
  3. return $this->hasOne(Designation::className(),['designation_id'=>'id]);
  4. }

在指定模型中,创建另一个关系,该关系将degination模型与namesGroup模型相关联,该模型也将自动创建

指定MOdel

  1. public function getDesignationGroup()
  2. {
  3. return $this->hasOne(DesignationGroup::className(),['id'=>'designation_group_id]);
  4. }

最后,在gridview上,您可以使用下面的代码获取组名

  1. $model->destination->designationGroup->group_name

我希望这能解决你的问题.虽然我已经习惯了几次.

猜你在找的PHP相关文章