use*_*282 8 php yii2 yii2-model
我试图通过使用关系通过Kartik GridView小部件列出一些数据yii2.我有这些表
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;
Run Code Online (Sandbox Code Playgroud)
designations表相关 designation_group的designations.designation_group_id.designationstable将有一个或多个以逗号分隔的值designation_group.id.
designations 表与员工表相关staffs.designation_id =designations.id.在StaffsModel I中添加了这样的关系
public function getDesignations() {
return $this->hasOne( Designations::className(), ['id' => 'designation_id']);
}
Run Code Online (Sandbox Code Playgroud)
并且工作正常.但designation_group我的关系尝试如下:
public function getDesgroupstaffs(){
return $this->hasOne(Designations::className() , ['id' => 'id'])
->from(Designationgroup::tableName() ) ;
}
Run Code Online (Sandbox Code Playgroud)
但它没有给出预期的结果.如何连接designation_group表格,以便还可以显示与员工相关的所有指定组?我想表示,网格视图的第一列将是名称,而同一列的过滤器应该是DesignationGroup.group_name.因此,如果选择了任何group_name,它将显示与该组名称关联的人员数据
小智 -1
我建议您从指定表中删除该列designation_group_id,因为它包含多个逗号分隔的值。再创建一个名为 designation_group_assigned 的表,该表将包含以下列:Id, designation_id,designation_group_id
在此表中,如果一个名称属于多个组,我们可以插入多行。
然后您可以将 yii 关系用于一对多记录。
| 归档时间: |
|
| 查看次数: |
2660 次 |
| 最近记录: |