Как я могу сгруппировать по значению столбца в запросе 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);