php - 使用 Yii2 中的关系连接多个表

标签 php yii2 yii2-model

我正在尝试使用关系通过 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_iddesignation_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/

相关文章:

PHP - 阅读 POST 变量的好习惯

yii2 - data-* 属性不适用于 Yii 2 中的 Html::a()

php - 拆分为两个后无法解析站点/索引 "modules"

Yii2 表名返回值

PHP POST 验证错误删除所有条目

php - symfony 1.4中使用Doctrine ORM更新mysql表时如何获取结果信息

Yii2 导航小部件 : active item

php - 我如何在yii2中的where条件(in子句)中使用变量

php - 模型类的 "save"方法工作时间很长

javascript - Symfony2 是否可以使用 Javascript 删除 session 变量?