yii2-用数据库中两个表中的数据填充表

问题描述 投票:0回答:2

我使用过Yii和Yii2几次,每次使用它,我都会迷失这个框架。实际上,Yii非常强大,它可以为您做很多事情,但是有时您会因此而迷失方向,不知道发生了什么以及如何做一些简单的事情。现在,我尝试用2个相关表中的数据填充表。我已经阅读过Yii论坛,stackoverflow主题,youtube ...,但没有任何效果。我的配置是Yii2 Advanced。

在postgres中,我有两个表:

  • 具有字段'id(int)'和'tool_name(varchar)'的表'tools'。
  • 具有字段'id(int)','tool_id(int-工具的外键)','option_name(varchar)','type(int)'的表'options'。

事实是,在我的选项/索引中,我想像这样在表格中显示工具名称(GridView?):

|工具名称|选项名称|类型|

另一个选项可能是通过DropDownList过滤表,在这里我可以选择工具并更新表。如果未选择任何工具,则显示所有数据。我不知道哪个选项更简单,对我来说都是有效的。

有人可以给我看些灯吗?我会很感激...谢谢!

gridview yii2 dropdown
2个回答
0
投票

在选项模型中,您需要添加以下内容

    public function getTools()
    {
        return $this->hasOne(Options::className(), ['id' => 'tool_id']);
    }


    public function getToolName() {
        return $this->tools->tool_name;
    }

然后在toolName的gridview中将有一个可用字段


0
投票

您正在寻找的是relations

在您的工具模型中将是hasMany

public function getOptions() {
  return $this->hasMany(Options::className(), ['id' => 'id'])
    ->count();
}

以及您的期权模型中的hasOne

public function getTool() {
  return $this->hasOne(Tools::className(), ['id' => 'id'])
    ->count();
}

现在$model = Tools::find()->all()也将通过$model->options提供相关数据。反之亦然。

由于您可能希望所有工具都带有所有选项,因此$ dataProvider将是选项,而不是工具。对于每个选项,您将获得相关的工具。

相关数据可以在网格视图中显示,并带有>

 [
 'attribute' => 'tools',
 'value' => 'tools.tool_name'
 ],

请参见this article以供参考。


0
投票

最好的方法是使用活动模型中实现的关系。

© www.soinside.com 2019 - 2024. All rights reserved.