加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 13:18:40 所属栏目:PHP教程 来源:网络整理
导读:我试图通过使用关系通过yii2中的Kartik GridView小部件列出一些数据. 我有这些表 staffsCREATE TABLE IF NOT EXISTS `staffs` ( `id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(250) CHARACTER SET utf8 DEFAULT NULL,`department_id` int(11) DEFAUL
我试图通过使用关系通过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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读