<rmcreative>

RSS

Все заметки с тегами «yii, Query Builder»

Можно уточнить:

    (1)
    (1)
  1. Когда уместен Active Record в Yii 2

    22 июля 2016

    В комментариях к посту про модули Дмитрий задал вопросы про AR.

    Объем записей в таблицах от 500к, почти каждый запрос это 2-3 JOINa. Раньше делал через геттеры AR, выборка за раз порядка 100 записей. Но заметил такую штуку, что если использовать createCommand, то память заметно меньше расходуется и скорость быстрее. К сожалению, сейчас не могу показать реальные тесты, так как тестировали это месяц назад, но в итоге, большую часть моделей мы переписали на DAO, отказавшись от AR.

    Память уходит на хранение данных в объектах. Скорость теряется из за необходимости эти объекты инстанциировать.

    Так, так ли плох AR или его использование подходит для небольших проектов? У нас также постоянно идет вставка, порядка 5000 записей в час. Пока для этого используем AR.

    Когда использование AR уместно, а когда нет?

    AR отлично подходит для удаления, обновления или добавления небольшого количества записей по одной за раз. Чрезвычайно удобно. К тому же, поддержка dirty attributes, то есть сохранения только того, что изменилось, позволяет хорошо разгрузить базу данных и скрыть до лучших времён многие моменты при параллельном редактировании. Если у вас в приложении нет сильно сложной логики и не требуется дополнительных абстракций для сущности, то AR для этого подходит идеально.

    Для простых выборок с целью отображения до сотни записей на страницу, в принципе, AR тоже подходит. Да, с массивами через query builder или с asArray() получается быстрее и меньше кушает памяти, но работать с ними не столь удобно.

    Для сложных выборок AR не рекомендуется. Сложные выборки у нас обычно возвращают какие-либо агрегаты или преобразованные данные, которые ну никак не вписываются в изначальную модель AR. В этом случае лучше делать выборки через query builder.

    Для импорта-экспорта также лучше использовать query builder.

    17 комментариев
  2. 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, тем самым позволяя, например, получать строки в виде новых объектов, экземпляров указанного класса или наполнять существующие объекты.

    8 комментариев
  3. Yii, построитель запроса

    17 ноября 2010

    Сегодня в SVN Yii появилась ещё одна интересная возможность. Построитель запросов. Тем, кто работал с CodeIgniter, он должен быть хорошо знаком (там он почему-то называется ActiveRecord).

    Итак, теперь, если вы не хотите использовать ActiveRecord, запросы можно строить динамически:

    $user = Yii::app()->db->createCommand()
      ->select('username, password')
      ->from('tbl_user')
      ->where('id=:id', array(':id'=>1))
      ->queryRow();
    28 комментариев