Как я могу сгруппировать по значению столбца в запросе yii?

У меня есть таблица данных с 7 столбцами и 400 записями. Одним из них является бюджет. Я хочу сгруппировать 400 строк по бюджету, чтобы получить такой массив:

[budget]=>array(
          [0]=>array(
              [column1]=>'1',
              [column2]=>'sand'
              ),
          [1]=>array(
              [column1]=>'2',
              [column2]=>'clay'
              )
          )
[budget2]=>array(
          [0]=>array(
              [column1]=>'3',
              [column2]=>'silt'
              ),
          [1]=>array(
              [column1]=>'4',
              [column2]=>'stone'
              )
          )

До сих пор я играл с Yd CdbCommand и CdbDataReader и PHP PDOStatement, но ничего не работает правильно. Я пробовал следующий код

public function actionBidCostByBudget(){

        $command = Yii::app()->db
        ->createCommand()
        ->Select('*')
        ->From('bid_cost')
        # ->Query()
        ;
        echo '<pre>';
        echo get_class($command);
        $pdostatement=$command->getPdoStatement();
        if($pdostatement) echo get_class($pdostatement);
        # print_r($statement->fetchall(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));
        # print_r($command->readall());
        # print_r($statement->fetch());
        # $columnsArray = BidCost::attributeLabels();

        //print_r($rowsArray);
        //$this->layout='\\layout';
}

Попытки print_r все распечатать ни с чем. getPdoStatement равно ничего. Я пытался использовать PDO::FETCH_COLUMN|PDO::FETCH_GROUP согласно веб-сайту Php.net, но он также не работает, потому что я ничего не получаю.

2 ответа

Одна из сильных сторон Yii - это ActiveRecord, так почему бы не использовать его?

Сделайте ваш бюджет отдельной таблицей (чтобы вы могли создать модель из него). Ссылка на это из ваших "датированных".

CREATE TABLE budget (
    id INTEGER PRIMARY KEY,
    name TEXT
);

CREATE TABLE datatable(
    column1 TEXT,
    column2 TEXT,
    ...
    budget_id INTEGER,
    FOREIGN KEY(budget_id) REFERENCES budget(id)
);

Затем сгенерируйте модели с помощью Gii, и теперь вы можете использовать свои недавно созданные отношения следующим образом:

$budget = Budget::model()->findByAttributes( ["name"=>"budget2"] );
foreach( $budget->datatables as $dt ) {
    echo $dt->column1;
    echo $dt->column2;
}

(Я знаю. Не тот массив, о котором вы просили. Извините, если я не справлюсь с этим.)

Хорошо, суть в том, что я не смог найти способ сделать это правильно через Yii, поэтому я сделал это с более практическим подходом.

Первое, что я сделал, - это установил соединение с базой данных через Yii.

$command = Yii::app()->db   //outputs CDbConnnection

Следующее, что я сделал, это получил класс PDO из соединения:

$pdoinstance = $command->getPdoInstance();  //outputs PDO class

С этого момента это была помощь, полученная с PHP.net, и еще один вопрос, размещенный на этом форуме:

$pdostatement=$pdoinstance->prepare('SELECT BUDGET_CODE, 
PAY_ITEM, ITEM, DESCRIPTION FROM bidcost');
$pdostatement->execute();
//default fetch mode could not be set
# $pdostatement->setfetchmode(PDO::FETCH_GROUP|PDO::FETCH_ASSOC); 
//returns array
$testarray=$pdostatement->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC); 
Другие вопросы по тегам