我有一个具有字段(标识,名称)的代理表
我有一个具有字段(agent_id,aggregator_id)的agent_aggregators表
我有一个带有字段(agent_id)的交易表
Aggregators表通过agent_id连接到agent表。
交易记录表具有agent_id字段。
现在在我的交易视图中,我有一个index.php,我想显示执行特定交易的聚合器的名称
交易视图/ index.php
['class' => 'yii\grid\SerialColumn'],
[
'attribute' => 'agent.aggregators.name',
label' => 'Aggregator\'s Name',
]
交易模型:
<?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']);
}
}
聚合器模型:
<?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']);
}
}
代理商模型:
<?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']);
}
}
答案 0 :(得分:0)
您在事务和代理表之间的关系是一对多关系。但是,聚集者的代理是很多很多的。因此,您不能获得一个聚合器(严格意义上来说),但是它将始终是聚合器的集合(尽管可能只有一个元素)。这段代码应该说明您正在尝试做的事情。
如果我误解了您的问题,请在评论中让我知道。
[
'label' => "Aggregator's Name",
'format' =>'ntext',
'value' => function($model)
{
$aggrs = $model->agent->aggregators;
return implode('\n', $aggrs);
}
]