2016-06-21 4 views
1

は、モデルの属性の1つでYii2モデルの結果セットをグループ化するにはどうすればよいですか?私の「学生の表で

var_dump(Students::find()->All()); 

は、次のような結果に

array (size=284) 
    0 => 
    object(frontend\models\Students)[68] 
     private '_attributes' (yii\db\BaseActiveRecord) => 
     array (size=10) 
      'id' => int 1 
      'student_name' => string 'VATS' (length=5) 
      'father_name' => string 'KARAMJEET SINGH' (length=15) 
      'class' => string '1st' (length=3) 

    1 => 
    object(frontend\models\Students)[68] 
     private '_attributes' (yii\db\BaseActiveRecord) => 
     array (size=10) 
      'id' => int 2 
      'student_name' => string 'VASHISHT' (length=5) 
      'father_name' => string 'PARAM KUMAR' (length=15) 
      'class' => string '1st' (length=3)  

     ...................... 
     ...................... 
     ...................... 

Iを与えるように、フィールド 'ID'、 'student_name'、 'father_name'、および 'クラス' はあります以下のようにモデルの 'クラス'フィールドをインデックスとして使用したいと考えています。

1st => 
    0=> 'id' => int 1 
      'student_name' => string 'VATS' (length=5) 
      'father_name' => string 'KARAMJEET SINGH' (length=15) 
      'class' => string '1st' (length=3) 
    1=> array (size=10) 
      'id' => int 2 
      'student_name' => string 'VASHISHT' (length=5) 
      'father_name' => string 'PARAM KUMAR' (length=15) 
      'class' => string '1st' (length=3)  

      ...................... 
      ...................... 

私はまた、Arrayhelper::index(..)機能をArrayhelper::map($array,... , ..)機能を試してみました。 Arrayhelper::index($array, 'field_name_to_be_used_as_index')は仕事をしているようですが、それぞれの 'クラス'タイプに対して1つの結果しか得られません。 上記のフォーマットで配列を得るにはどうしたらいいですか?

+0

使用 'asArrayを() 'を作成。 –

+0

@RuslanBes、 '1st'、 '2nd'などのように 'class'の値が異なる要素がたくさんあるので、私は.......... ........ 。結果の下に。 –

+0

@InsaneSkullあなたは親切にasArrayの例を挙げることができます –

答えて

3

これを達成する唯一の方法は、をループし、より簡略化された結果のためのクエリを使用して新しい配列

$original_array = Students::find()->asArray()->All(); 
$grouped_array = []; 
foreach ($original_array as $value) { 
    $grouped_array[$value['class']][] = $value; 
} 
var_dump($grouped_array); 
+0

将来の訪問者のために、モデルを配列に変換するために 'ArrayHelper :: toArray($ model)'を使うことができると付け加えます。その後、Kandarpの答えは魅力:)!ありがとう。 –

+0

asArrayをfind()で使用すると、モデルを配列に変換して答えを編集します。ありがとう –

関連する問題