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?
u peut modifier dataProvider passer à gridview dans ce searchmodel – mohsen
@mohsen, que voulez-vous dire modifier le dataProvider, les relations sont définies dans le modèle, pouvez-vous donner un exemple? – Dunams