2016-06-21 4 views
1

В моей таблице "студентов, есть поля 'Идентификатор', 'student_name', 'father_name' и 'класс', чтоКак создать набор результатов 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 хотите использовать поле «класс» модели как индекс, например, ниже ... eg

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::map($array,... , ..), также функция Arrayhelper::index(..). Кажется, что Arrayhelper::index($array, 'field_name_to_be_used_as_index') выполняет эту работу, но дает только один результат для каждого типа класса. Как достичь массива в формате выше?

+0

использования 'asArray()' с запросом для более упрощенного результата. –

+0

@ RuslanBes, есть еще много элементов с разными значениями «класс», поданных как «1-й», «2-й» и т. Д., Поэтому я поставил .......... ........ ниже результатов. –

+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(), который преобразует модели в массив, отредактирует ответ. благодаря –

Смежные вопросы