2017-09-05 2 views
0

je les relations suivantes définies dans le modèletables cadres Yii2 rejoignent

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']); 
} 

Et dans la vue:

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', 
], 

]);

Cependant, dans le débogueur, il semble qu'il y ait trop de requêtes en cours. Pour chaque enregistrement d'affectation, il y a une requête de sélection pour la table appropriée (utilisateurs, applications, compte)

Comment puis-je éviter d'avoir ces requêtes et avoir simplement une instruction de jointure avec toutes ces valeurs?

+0

u peut modifier dataProvider passer à gridview dans ce searchmodel – mohsen

+0

@mohsen, que voulez-vous dire modifier le dataProvider, les relations sont définies dans le modèle, pouvez-vous donner un exemple? – Dunams

Répondre