Достать из Active Record одно значение

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
Haku
Сообщения: 58
Зарегистрирован: 2015.03.11, 07:39

Достать из Active Record одно значение

Сообщение Haku »

Добрый вечер.
Подскажите, как можно из экземпляра "Active Record", который возвращают методы find, достать одно или два значения без дополнительных свойств (related, validators, scenario и др.).
Например, при поиске по какому-либо критерию мы получим следующий массив объектов:

Код: Выделить всё

Array
(
    [0] => Test Object
        (
            [_new:CActiveRecord:private] => 
            [_attributes:CActiveRecord:private] => Array
                (
                    [id] => 2
                    [name] => new_user
                    [email] => localhost@localhost
                    [age] => 25
                )

            [_related:CActiveRecord:private] => Array
                (
                )

            [_c:CActiveRecord:private] => 
            [_pk:CActiveRecord:private] => 2
            [_alias:CActiveRecord:private] => t
            [_errors:CModel:private] => Array
                (
                )

            [_validators:CModel:private] => 
            [_scenario:CModel:private] => update
            [_e:CComponent:private] => 
            [_m:CComponent:private] => 
        )
) 
Каким образом можно сделать, чтобы возвращался массив только со значениями id и name, на подобии:

Код: Выделить всё

Array
(
    [id] => 2
    [name] => new_user
) 
Заранее спасибо.

Теги: yii, framework, active record, cactiverecord, find, findall.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Достать из Active Record одно значение

Сообщение zelenin »

вы хотите избавиться от AR, так зачем вам тогда AR, чтобы достать два значения? Избавьтесь от него и используйте прямые запросы.
Choo
Сообщения: 154
Зарегистрирован: 2011.09.20, 22:58

Re: Достать из Active Record одно значение

Сообщение Choo »

Если правильно понял задачу:

Код: Выделить всё

$model->getAttributes(array('id', 'name')); 
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Достать из Active Record одно значение

Сообщение zelenin »

Choo писал(а):Если правильно понял задачу:

Код: Выделить всё

$model->getAttributes(array('id', 'name'));
неправильно
Choo
Сообщения: 154
Зарегистрирован: 2011.09.20, 22:58

Re: Достать из Active Record одно значение

Сообщение Choo »

zelenin писал(а):
Choo писал(а):Если правильно понял задачу:

Код: Выделить всё

$model->getAttributes(array('id', 'name')); 
неправильно
Вы вроде не автор вопроса?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Достать из Active Record одно значение

Сообщение zelenin »

Choo писал(а):
zelenin писал(а):
Choo писал(а):Если правильно понял задачу:

Код: Выделить всё

$model->getAttributes(array('id', 'name'));
неправильно
Вы вроде не автор вопроса?
если сомневаетесь, посмотрите первое сообщение - у меня спрашивать не надо.
Choo
Сообщения: 154
Зарегистрирован: 2011.09.20, 22:58

Re: Достать из Active Record одно значение

Сообщение Choo »

Это был риторический вопрос, намекающий на некорректность вашего высказывания )
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Достать из Active Record одно значение

Сообщение zelenin »

Choo писал(а):Это был риторический вопрос, намекающий на некорректность вашего высказывания )
ваше риторическое высказывание некорректно, т.к. вы не в личной переписке, а на форуме, поэтому автор я или нет значения не имеет.
Аватара пользователя
Haku
Сообщения: 58
Зарегистрирован: 2015.03.11, 07:39

Re: Достать из Active Record одно значение

Сообщение Haku »

zelenin писал(а):Избавьтесь от него и используйте прямые запросы.
Для чего же тогда встроенные команды Yii — find, findAll и т.п.?
Choo писал(а):Если правильно понял задачу:

Код: Выделить всё

$model->getAttributes(array('id', 'name'));
Это не совсем то, здесь вы просто достаёте из объекта AR нужные значения. Мне же нужно, чтобы весь массив состоял только из двух значений id и name.

Собственно решил проблему самостоятельно следующим образом:

Код: Выделить всё

$criteria = new CDbCriteria;
$criteria->select = '`id`, `name`';
$criteria->condition = 'id = :id';
$criteria->params = array(':id' => $parameter);

$command = User::model()->getCommandBuilder()->createFindCommand(User::model()->tableName(), $criteria);
$result = $command->query()->read();
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Достать из Active Record одно значение

Сообщение zelenin »

Haku писал(а):Для чего же тогда встроенные команды Yii — find, findAll и т.п.?
это реализация паттерна AR - абстракция от запросов в БД. Вот в рамках AR вы и будете работать - с yii-шными relations, behaviors итд.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Достать из Active Record одно значение

Сообщение zelenin »

Haku писал(а): Собственно решил проблему самостоятельно следующим образом:

Код: Выделить всё

$criteria = new CDbCriteria;
$criteria->select = '`id`, `name`';
$criteria->condition = 'id = :id';
$criteria->params = array(':id' => $parameter);

$command = User::model()->getCommandBuilder()->createFindCommand(User::model()->tableName(), $criteria);
$result = $command->query()->read(); 
собственно это я вам и написал в первом комменте.
Аватара пользователя
Haku
Сообщения: 58
Зарегистрирован: 2015.03.11, 07:39

Re: Достать из Active Record одно значение

Сообщение Haku »

zelenin писал(а):
Haku писал(а): Собственно решил проблему самостоятельно следующим образом:

Код: Выделить всё

$criteria = new CDbCriteria;
$criteria->select = '`id`, `name`';
$criteria->condition = 'id = :id';
$criteria->params = array(':id' => $parameter);

$command = User::model()->getCommandBuilder()->createFindCommand(User::model()->tableName(), $criteria);
$result = $command->query()->read();
собственно это я вам и написал в первом комменте.
Я подумал, что под фразой "используйте прямые запросы" вы подразумевали запросы на чистом SQL. Возникло простое недопонимание.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Достать из Active Record одно значение

Сообщение zelenin »

Haku писал(а):
zelenin писал(а):
Haku писал(а): Собственно решил проблему самостоятельно следующим образом:

Код: Выделить всё

$criteria = new CDbCriteria;
$criteria->select = '`id`, `name`';
$criteria->condition = 'id = :id';
$criteria->params = array(':id' => $parameter);

$command = User::model()->getCommandBuilder()->createFindCommand(User::model()->tableName(), $criteria);
$result = $command->query()->read(); 
собственно это я вам и написал в первом комменте.
Я подумал, что под фразой "используйте прямые запросы" вы подразумевали запросы на чистом SQL. Возникло простое недопонимание.
я имел в виду любую более низкоуровневую вещь, незавязанную на AR. Наприме то, что вы использовали.
Аватара пользователя
Haku
Сообщения: 58
Зарегистрирован: 2015.03.11, 07:39

Re: Достать из Active Record одно значение

Сообщение Haku »

Ещё появился один вопрос: как можно выгрузить несколько записей с помощью конструкции, которую я приводил выше?

Код: Выделить всё

$command = User::model()->getCommandBuilder()->createFindCommand(User::model()->tableName(), $criteria);
$result = $command->query()->read();
Choo
Сообщения: 154
Зарегистрирован: 2011.09.20, 22:58

Re: Достать из Active Record одно значение

Сообщение Choo »

Код: Выделить всё

$command->queryAll(); 
Ответить