<rmcreative>

RSS

Yii: объекты и классы как результат выборки

12 февраля 2011

Предложение возвращать объекты вместо массивов при использовании построителя запросов или DAO нам сразу понравилось. Сегодня у меня дошли руки до реализации и в SVN появилась данная возможность в несколько расширенном варианте.

$sql='SELECT * FROM posts LIMIT 1';
$command=$this->_connection->createCommand($sql);
$command->setFetchMode(PDO::FETCH_OBJ);
$post = $command->queryRow();
echo $post->title;

Параметры setFetchMode принимает идентично одноимённому методу PDO, тем самым позволяя, например, получать строки в виде новых объектов, экземпляров указанного класса или наполнять существующие объекты.

Комментарии RSS

  1. №3901
    Ekstazi
    Ekstazi 12 февр. 2011 г., 11:25:13

    Хм, экземпляры класс StdObject ? Или можно, например, AR-объекты получить ?

  2. №3903
    Sam
    Sam 12 февр. 2011 г., 20:25:50
    // экземпляр класса
    $command->setFetchMode(PDO::FETCH_CLASS , "Post");
    // существующий объект
    $command->setFetchMode(PDO::FETCH_INTO , $post);
  3. №3905
    Ekstazi
    Ekstazi 12 февр. 2011 г., 21:18:11

    О, спасибо

  4. №3909
    mc-bear
    mc-bear 13 февр. 2011 г., 1:18:12

    Может вынести setFetchMode куда нибудь в настройки, чтоб на уровне приложения можно было настроить?

  5. №4129
    gri
    gri 16 марта 2011 г., 11:53:01

    Было бы проще удобней или дополнительный метод $command->queryObj(); чем лезть из модели в кишки PDO. Если передается строка - PDO::FETCH_CLASS, если объект - PDO::FETCH_INTO. Вообще странно что в yii об этом задумались только сейчас.

  6. №4130
    gri
    gri 16 марта 2011 г., 12:10:39

    прошу прощения, "проще и удобней иметь дополнительный метод"

  7. №4840
    rak
    rak 16 июня 2011 г., 18:03:19

    Кстати, для AR нужно использовать $command->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, CLASS); Ибо просто с PDO::FETCH_CLASS объект не заполняется

  8. №8560
    Степан
    Степан 12 нояб. 2013 г., 14:12:06

    Интересная статья, надо бы попрактиковаться

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.