首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii2将3个不同的表链接到一起,并在其中一个字段中使用字段

Yii2将3个不同的表链接到一起,并在其中一个字段中使用字段
EN

Stack Overflow用户
提问于 2019-02-28 18:59:27
回答 1查看 57关注 0票数 2

我有一个包含字段(id,name)的agents表

我有一个包含字段(agent_id,aggregator_id)的agent_aggregators表

我有一个带有字段的transactions表(agent_id)

Aggregators表通过agent_id连接到agents表。

Transactions表有一个agent_id字段。

现在,在我的transactions视图中,我有一个index.php,我想要显示执行特定事务的聚合器的名称

事务视图/ index.php

代码语言:javascript
复制
['class' => 'yii\grid\SerialColumn'],
[
   'attribute' => 'agent.aggregators.name',
   label' => 'Aggregator\'s  Name',
]

交易模型:

代码语言:javascript
复制
<?php

namespace app\models;

use Yii;


class Transactions extends \yii\db\ActiveRecord
{

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'transactions';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [



        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'ID' => 'ID',
        ];
    }



    public function getAgent()
    {
        return $this->hasOne(Agents::className(), ['ID' => 'agent_id']);
    }

}

聚合器模型:

代码语言:javascript
复制
<?php

namespace app\models;

use Yii;

class AgentsAggregators extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'agents_aggregators';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [

        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'agent_id' => 'Agent ID',

        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getAgent()
    {
        return $this->hasOne(Agents::className(), ['ID' => 'agent_id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getAggregator()
    {
        return $this->hasOne(Agents::className(), ['ID' => 'aggregator_id']);
    }


}

代理模型:

代码语言:javascript
复制
<?php

namespace app\models;

use Yii;

class Agents extends \yii\db\ActiveRecord
{

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'agents';
    }

    /**
     * @inheritdoc
     */

        public function rules()
    {
        return [

        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'ID' => 'ID',
            'name' => 'Agent\'s Name',
        ];
    }


    /**
     * @return \yii\db\ActiveQuery
     */
    public function getAgentsAggregators()
    {
        return $this->hasMany(AgentsAggregators::className(), ['agent_id' => 'ID']);
    }


    public function getAggregators()
    {
        return $this->hasMany(Agents::className(), ['ID' => 'aggregator_id'])->viaTable('agents_aggregators', ['agent_id' => 'ID']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getAgents()
    {
        return $this->hasMany(Agents::className(), ['ID' => 'agent_id'])->viaTable('agents_aggregators', ['aggregator_id' => 'ID']);
    }

}
EN

回答 1

Stack Overflow用户

发布于 2019-03-07 00:02:07

事务处理表和座席表之间的关系是一对多关系。然而,代理对聚合器是多对多的。因此,您不能获得单个聚合器(严格意义上),但它将始终是聚合器的集合(尽管可能只有一个元素)。这段代码应该说明你正在尝试做什么。

如果我误解了你的问题,请在评论中告诉我。

代码语言:javascript
复制
[
   'label' => "Aggregator's  Name",
   'format' =>'ntext',
    'value' => function($model)
    {
        $aggrs = $model->agent->aggregators;
        return implode('\n', $aggrs);
    }
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54924130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档