->asArray() а где ->asObject()?
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
->asArray() а где ->asObject()?
как то привычнее работать с объектами но ->asObject() не нашел? Действительно нет или не досмотрел?
Re: ->asArray() а где ->asObject()?
ActiveRecord::find() возвращает объекты.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: ->asArray() а где ->asObject()?
то есть можно выбрать с таблицы строки в виде объектов? У меня не вышло)
в pdo есть возможность извлечь строки в виде объекта http://php.net/manual/ru/pdostatement.fetchobject.php
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: ->asArray() а где ->asObject()?
как то так получил желаемый результат
было бы не плохо иметь возможность установить $fetchMode и в Query$products = Yii::$app->db->createCommand('SELECT id, name, price FROM c_products LIMIT 1')
->queryAll(5);
public function all($db = null)
{
if ($this->emulateExecution) {
return [];
}
$rows = $this->createCommand($db)->queryAll();
return $this->populate($rows);
}
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: ->asArray() а где ->asObject()?
Код: Выделить всё
$products = (new Query())
->select('id, name, price')
->from('c_products')
->orderBy('RAND()')
->limit(5)->createCommand()->queryAll(5);
Re: ->asArray() а где ->asObject()?
Wizard писал(а): ↑2018.02.05, 21:02такой вариант тоже отдает stdClassКод: Выделить всё
$products = (new Query()) ->select('id, name, price') ->from('c_products') ->orderBy('RAND()') ->limit(5)->createCommand()->queryAll(5);
Код: Выделить всё
$products = Product::find()->all();
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: ->asArray() а где ->asObject()?
да, но для этого необходимо создать модель Producturichalex писал(а): ↑2018.02.05, 21:32Wizard писал(а): ↑2018.02.05, 21:02такой вариант тоже отдает stdClassКод: Выделить всё
$products = (new Query()) ->select('id, name, price') ->from('c_products') ->orderBy('RAND()') ->limit(5)->createCommand()->queryAll(5);
Отдаст массив с объектами ProductКод: Выделить всё
$products = Product::find()->all();
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: ->asArray() а где ->asObject()?
не знаю, возможно наколхозил но мне как то удобное работать с объектами вместо массивов
еще один вариант)))
еще один вариант)))
class Query extends \yii\db\Query
{
public function allClass($db = null)
{
if ($this->emulateExecution) {
return [];
}
$rows = $this->createCommand($db)->queryAll(5);
return $this->populate($rows);
}
}
$products = (new Query())
->select('id, name, price')
->from('c_products')
->limit(5)
->allClass();
Последний раз редактировалось BalykhinAS 2018.02.05, 21:54, всего редактировалось 1 раз.
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: ->asArray() а где ->asObject()?
просто получается что PDOStatement::setFetchMode предусмотрен, но что бы (даже если и в частных случаях как мой) воспользоваться им надо искать варианты вместо того что бы просто воспользоваться в том же Query
Re: ->asArray() а где ->asObject()?
Можно вообще не использовать Yii, если не нравятся ее подходы или если от фреймворка нужны только хелперы.
Есть Doctrine есть другие инструменты для работы с бд.
Есть Doctrine есть другие инструменты для работы с бд.
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: ->asArray() а где ->asObject()?
можно, вопрос ведь не в том использовать или нет, суть в том что кто то работает с массивами а кому то удобное работать с объектами (stdClass). Опять же, возникает потребность выбрать записи из базы без использования моделей, но при этом работать с stdClass вместо array
Фреймворк на то и нужен что бы гибко с ним работать
Re: ->asArray() а где ->asObject()?
Yii такой инструмент. Кто выбрал Yii в принципе подписался на модели, сценарии, статику...
Re: ->asArray() а где ->asObject()?
За гибкостью - это не к Yii =)Wizard писал(а): ↑2018.02.05, 21:54можно, вопрос ведь не в том использовать или нет, суть в том что кто то работает с массивами а кому то удобное работать с объектами (stdClass). Опять же, возникает потребность выбрать записи из базы без использования моделей, но при этом работать с stdClass вместо array
Фреймворк на то и нужен что бы гибко с ним работать
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: ->asArray() а где ->asObject()?
вариант для моделей
на выходе stdClass вместо массива
правда некоторые плюшки не доступны при таком подходе
Код: Выделить всё
$products = Product::find()
->select('id, name, price')
->limit(10)
->createCommand()
->queryAll(5);
правда некоторые плюшки не доступны при таком подходе
Re: ->asArray() а где ->asObject()?
Использовать модель для того, чтобы использовать ее как кверибилдер?Wizard писал(а): ↑2018.02.05, 22:51 вариант для моделей
на выходе stdClass вместо массиваКод: Выделить всё
$products = Product::find() ->select('id, name, price') ->limit(10) ->createCommand() ->queryAll(5);
правда некоторые плюшки не доступны при таком подходе
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: ->asArray() а где ->asObject()?
это меня понесло)) не туда(urichalex писал(а): ↑2018.02.05, 22:59Использовать модель для того, чтобы использовать ее как кверибилдер?Wizard писал(а): ↑2018.02.05, 22:51 вариант для моделей
на выходе stdClass вместо массиваКод: Выделить всё
$products = Product::find() ->select('id, name, price') ->limit(10) ->createCommand() ->queryAll(5);
правда некоторые плюшки не доступны при таком подходе
все равно не пойму почему только массив!? ((
Re: ->asArray() а где ->asObject()?
А что, createCommand() вызвать - это гиперсложно?
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: ->asArray() а где ->asObject()?
не то что бы сложно...
вот к примеру мне хотелось бы без костылей выбрать товары но так что бы хотябы вместо массива был sdtClass а в идеале задать класс вручную или оставить, к примеру, изображений без изминений$models = $query->offset($pages->offset)
->select('id, store_id, name, price')
->with(['store' => function (\yii\db\ActiveQuery $query) {
$query->select('id, name');
}])
->with(['images' => function (\yii\db\ActiveQuery $query) {
$query->select('id, product_id, store_id, filename, object');
}])
->limit($pages->limit)
->asArray()
->all();