Yii2 - 使用activerecord显示gridview中关系数据的计数

时间:2017-04-24 12:35:10

标签: mysql gridview activerecord yii2 yii2-advanced-app

我有两个表代理和代理,我想显示每个代理使用计数查询的代理数量(“代理”表有一个名为'agency_id'的列)。 stackoverflow上有old post,但它没有完全回答。

这是我到目前为止所尝试的内容:

在代理商模型中(以获取代理商网格视图中的代理商数量):

 */
public function getAgents()
{
    return $this->hasMany(Professionnels::className(), ['agency_id' => 'id']);

}

在代理商模型中(在代理网格视图中获取代理商名称):

public function getAgencies()
{
    return $this->hasOne(Agencies::className(), ['id' => 'agency_id']);
}

在显示网格视图的代理商视图中:

'columns' => [
        ....,
         ['label' => 'Agents Number','attribute' => 'count(agents.id'),]

在AgenciesSearch:

$query = Agencies::find()->with('agents');

1 个答案:

答案 0 :(得分:2)

您可以在列的count()属性中调用关系中的value函数:

'columns' => [
....,
  [
    'label' => 'Agents Number',
    'attribute' => 'agents',
    'value' => function ($model) { return $model->getAgents()->count();}
  ]

另一种选择是创建一种新的方法来获取代理商模型中的代理商数量:

public function getAgentsCount()
{
    return $this->getAgents()->count();
}

请致电参考专栏:

'columns' => [
    ....,
      [
        'label' => 'Agents Number',
        'attribute' => 'agentsCount',
      ]