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

前端之家收集整理的这篇文章主要介绍了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() ) ;
}

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

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

在员工模型中,创建如下所述的关系,或者您可以使用现有的关系,我相信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

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

原文链接:https://www.f2er.com/php/136907.html

猜你在找的PHP相关文章