我试图通过使用关系通过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() ) ; }
但它没有给出预期的结果.
如何加入designation_group表,以便还可以显示与员工相关的所有指定组?
我想表示,网格视图的第一列将是名称,而同一列的过滤器应该是DesignationGroup.group_name.因此,如果选择了任何group_name,它将显示与该组名相关联的人员数据
好吧,从我能够从您的问题中提取的内容,您希望能够获得每个员工的组名.下面的代码将帮助您完成该任务.
原文链接:https://www.f2er.com/php/136907.html在员工模型中,创建如下所述的关系,或者您可以使用现有的关系,我相信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]); }
$model->destination->designationGroup->group_name
我希望这能解决你的问题.虽然我已经习惯了几次.