2016-02-04 2 views
1

Dans my _form.php Je veux créer un menu déroulant qui contient les noms des utilisateurs concernés (les utilisateurs concernés de = avec le rôle « releaseManager » Voici le code:Obtenir des données pertinentes queryAll YII2

echo $form->field($model, 'Assignee')->dropDownList([$assignees = Yii::$app->db->createCommand('SELECT username FROM user, auth_assignment WHERE id=user_id AND item_name="releaseManager"') 
     ->queryAll()]); 

Le problème est Par exemple: J'ai 2 noms pertinents, donc je reçois 2 lignes de 0 avant le premier nom et une ligne avec "1" avant la seconde. l'endroit dans le tableau ou je ne sais pas quoi .. J'ai essayé d'utiliser queryScalar(), mais alors je g et seulement un nom au lieu de 2. J'apprécierai vraiment votre aide.

Répondre

1

Peut-être vous avez besoin ArrayHelper::map()

use yii\helpers\ArrayHelper; 

<?php 
    echo $form->field($model, 'Assignee')-> 
    dropDownList(ArrayHelper::map(Yii::$app->db-> 
     createCommand('SELECT username FROM user, auth_assignment WHERE id=user_id AND item_name="releaseManager"') 
    ->queryAll(), 'username', 'username')); 
?> 
+0

Parfait! Merci! – Jenny

0

Pour réutilisabilité, nous pouvons également créer méthode distincte dans le modèle:

public function getUserNames() 
{ 
    $usernames = Yii::$app->db->createCommand('SELECT username FROM user, auth_assignment WHERE id=user_id AND item_name="releaseManager"') 
       ->queryAll(); 
    $result = yii\helpers\ArrayHelper::map($usernames, 'user_id', 'username'); 
    return $result; 
} 

Formulaire

echo $form->field($model, 'Assignee')->dropDownList(PathTOModel/ModelName::getUserNames())