php – 使用Yii2中的关系加入多个表
我试图通过使用关系通过yii2中的Kartik GridView小部件列出一些数据.
我有这些表 staffs CREATE TABLE IF NOT EXISTS `staffs` ( `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`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; designations CREATE TABLE IF NOT EXISTS `designations` ( `id` int(11) NOT NULL AUTO_INCREMENT,`designname` varchar(150) NOT NULL,`designation_group_id` varchar(250) NOT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; designation_group CREATE TABLE IF NOT EXISTS `designation_group` ( `id` int(11) NOT NULL AUTO_INCREMENT,`group_name` text NOT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 名称表通过designations.designation_group_id与designation_group相关.名称表将具有一个或多个以逗号分隔的值:designation_group.id. 名称表与staffs.designation_id = designations.id的员工表相关. public function getDesignations() { return $this->hasOne( Designations::className(),['id' => 'designation_id']); } 并且工作正常.但是我之所以尝试这样的关系是这样的: public function getDesgroupstaffs(){ return $this->hasOne(Designations::className(),['id' => 'id']) ->from(Designationgroup::tableName() ) ; } 但它没有给出预期的结果.
好吧,从我能够从您的问题中提取的内容,您希望能够获得每个员工的组名.下面的代码将帮助您完成该任务.
在员工模型中,创建如下所述的关系,或者您可以使用现有的关系,我相信Yii会自动为您生成它 员工模型 public function getDesignation() { return $this->hasOne(Designation::className(),['designation_id'=>'id]); } 在指定模型中,创建另一个关系,该关系将degination模型与namesGroup模型相关联,该模型也将自动创建 指定MOdel public function getDesignationGroup() { return $this->hasOne(DesignationGroup::className(),['id'=>'designation_group_id]); } 最后,在gridview上,您可以使用下面的代码获取组名 $model->destination->designationGroup->group_name 我希望这能解决你的问题.虽然我已经习惯了几次. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |