我正在尝试使用关系通过 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
表通过 designations.designation_group_id
与 designation_group
相关。 designations
表将有一个或多个用逗号分隔的 designation_group.id
值。
designations
表通过 staffs.designation_id =designations.id
与 staffs 表关联。
在 Staffs
模型中,我添加了这样的关系
public function getDesignations() {
return $this->hasOne( Designations::className(), ['id' => 'designation_id']);
}
并且工作完美。但是 designation_group
的关系我是这样尝试的:
public function getDesgroupstaffs(){
return $this->hasOne(Designations::className() , ['id' => 'id'])
->from(Designationgroup::tableName() ) ;
}
但它并没有给出预期的结果。
如何连接 designation_group
表,以便显示与员工关联的所有指定组?
我想显示, GridView 的第一列将是名称,而同一列的过滤器应该是 DesignationGroup.group_name。因此,如果选择了任何组名,它将显示与该组名关联的员工数据
最佳答案
好吧,根据我从您的问题中提取的内容,您希望能够获得每个员工的组名。下面的代码将帮助您完成该任务。
在 staff 模型中,创建如下所述的关系,或者您可以使用现有的关系,我相信 Yii 会自动为您生成它
STAFF 模型
public function getDesignation()
{
return $this->hasOne(Designation::className(),['designation_id'=>'id]);
}
在 designation 模型中,创建另一个连接 degination 模型和 designationGroup 模型的关系,这也是自动创建的
指定模型
public function getDesignationGroup()
{
return $this->hasOne(DesignationGroup::className(),['id'=>'designation_group_id]);
}
最后,在您的 gridview 上,您可以使用下面的代码来获取组名
$model->destination->designationGroup->group_name
希望这能解决您的问题。虽然我已经用过几次了。
关于php - 使用 Yii2 中的关系连接多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35619910/