atis2345
@atis2345
PHP developer

Как можно заюзать PDO::FETCH_CLASS при чистых запросах к бд на Yii2?

class User
{
    public $id;
    public $name;
}

$sql = "SELECT id, name FROM users";

$sth = Yii::$app->db->pdo->prepare($sql);
$sth->execute();
$sth->fetchAll(PDO::FETCH_CLASS, 'User');


Как можно такой запрос сделать на Yii2 используя Yii::$app->db->createCommand()?
Нужно только для логгирования.

P.S. : Это просто пример! ActiveRecord тут не уместен.
  • Вопрос задан
  • 552 просмотра
Решения вопроса 1
qonand
@qonand
Software Engineer
используйте для этих целей DataReader
Например:
class User extends \yii\base\Object
{
    public $id;
    
    public $name;
}

$query = new \yii\db\Query;
$query->select(['id', 'name'])->from('users');
$command = $query->createCommand(Yii::$app->db);
$reader = $command->query();
while ($user = $reader->readObject(User::className(), [])){
    $users[] = $user;    
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Всё расписано в документации
И ещё
И ещё
Пример из документации:
$command = (new \yii\db\Query())
    ->select(['id', 'email'])
    ->from('user')
    ->where(['last_name' => 'Smith'])
    ->limit(10)
    ->createCommand();

// показать SQL запрос
echo $command->sql;
// показать привязываемые параметры
print_r($command->params);

А что именно у Вас не получается?
Ответ написан
@khalmurad
PHP dev
$sql = "SELECT id, name FROM users";
$command = Yii::$app->db->createCommand($sql);
$users = $command->queryAll(\PDO::FETCH_CLASS);
/**
 * или
 * $users= $command->queryAll(8);
 **/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы