2012-05-30 5 views
2

У меня есть таблица под названием Категория с несколькими столбцами, и я пытаюсь получить только несколько из моей базы данных.Получение конкретных данных из базы данных

Так что я попытался это:

$sql = 'SELECT uppercat AS id, COUNT(uppercat) AS uppercat FROM category GROUP BY uppercat;'; 
$d = Yii::app()->db->createCommand($sql)->query(); 

Но я нахожу выход странно. Я пытался сделать array_shift, но я получаю сообщение об ошибке, что это не массив. Когда я делаю var_dump на $ D:

object(CDbDataReader)[38] 
    private '_statement' => 
    object(PDOStatement)[37] 
     public 'queryString' => string 'SELECT uppercat AS id, COUNT(uppercat) AS uppercat FROM category GROUP BY uppercat;' (length=100) 
    private '_closed' => boolean false 
    private '_row' => null 
    private '_index' => int -1 
    private '_e' (CComponent) => null 
    private '_m' (CComponent) => null 

Ок .. тогда я сделал Еогеасп на $ ID:

array 
    'id' => string '0' (length=1) 
    'uppercat' => string '6' (length=1) 
array 
    'id' => string '3' (length=1) 
    'uppercat' => string '2' (length=1) 
array 
    'id' => string '6' (length=1) 
    'uppercat' => string '1' (length=1) 
array 
    'id' => string '7' (length=1) 
    'uppercat' => string '2' (length=1) 
array 
    'id' => string '9' (length=1) 
    'uppercat' => string '2' (length=1) 

Тогда почему я получаю сообщение, что $ ID не является массивом в то время как он содержит массивы?

Есть ли какой-либо другой способ, как получить некоторые данные из моей базы данных и что я могу сделать array_shift на них? Я также попытался сделать это с помощью findAllBySql, но тогда я не могу достичь своего атрибута для COUNT (uppercat), которого нет в моей модели. Думаю, мне пришлось бы добавить его в мою модель, но мне это не понравится, потому что мне нужно это только один раз.

ответ

5

CDbCommand's query возвращает объект CDbDataReader для получения результата запроса. Вместо этого используйте queryAll, который возвращает массив строк.

Однако, это лучше, если вы делаете это с CDbCriteria (вам нужно свойство модели для этого, вы правы).

Это будет выглядеть примерно так, если свойство называется countUppercat.

$criteria = new CDbCriteria; 
$criteria->select = 'uppercat, COUNT(uppercat) AS countUppercat'; 
$criteria->group = 'countUppercat'; 
$models = CategorieModel::model()->findAll($criteria); 
+0

Отлично работает, спасибо! – ifsession

3

Попробуйте это .. его закрыли, который вы использовали approched ...

$sql = 'SELECT uppercat AS id, COUNT(uppercat) AS uppercat FROM categorie GROUP BY uppercat;'; 
$d = Yii::app()->db->createCommand($sql)->queryAll(); 

и после этого, когда вы хотите видеть свой массив так использовать,

print_r($d); 

так что вы получите массив ..

он будет работать для вас.

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