Yii2框架表连接

问题描述:

我在模型Yii2框架表连接

public function getApplication() 
{ 
    return $this->hasOne(Applications::className(), ['application_id' => 'application_id']); 
} 

public function getAccount() 
{ 
    return $this->hasOne(Accounts::className(), ['account_id' => 'account_id']); 
} 

public function getUser() 
{ 
    return $this->hasOne(Users::className(), ['user_id' => 'oncall_id']); 
} 

并在视图定义如下关系:

GridView::widget([ 
'dataProvider' => $dataProvider, 
'tableOptions' => ['class' => 'table table-bordered table-hover table-striped'], 
'columns' => [ 
    ['attribute' => 'oncalls.start_date', 'value' => 'start_date', 'headerOptions' => ['width' => '10%']], 
    ['label' => 'Shift', 'value' => function($data) { 
      if ($data->shift_start && $data->shift_end) 
       return $data->shift_start . " -> " . $data->shift_end; 
     }], 
    'account.account_name', 
    'application.application_name', 
    'user.real_name', 
    ['label' => 'Priority', 'value' => function ($dataProvider) { 
      if ($dataProvider->priority == 1) 
       return "Primary"; 
      else 
       return "Secondary"; 
     }], 
    'user.phone_1', 
    'user.phone_2', 
], 

]);

但是,在调试器中,似乎有过多的查询正在进行。 对于每个分配记录,有一个适当的表(用户,应用程序,帐户)的选择查询

我该如何避免有这些查询,只是有一个与所有这些值的联合声明?

+0

ü可以编辑dataProvider中传递到GridView控件在searchmodel – mohsen

+0

@mohsen,你的意思编辑的数据提供程序,在关系模型中的设定是什么,你能不能举个例子? – Dunams

您可以在查询中使用“with”或“joinWith”。

$dataProvider->query->with('account', 'application', 'user'); 

http://www.yiiframework.com/doc-2.0/yii-db-activequerytrait.html#with()-detail

+0

谢谢!完美的作品:) – Dunams