ФорумПрограммированиеPHP для идиотов → DBAL

DBAL

  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 26 августа 2009 г. 15:23

    Собственно, сабж - у кого как организован уровень абстрации данных? Используете ли ORM'ы? Может собственные решения? Или какие-нибудь интересные источники посоветуйте.

    Сам сейчас остановился на паттерне TableGateway. Есть базовый класс с методами findById, insert, update, delete (которые для большинства таблиц одинаковы, отличаются только наборами полей). Классы-наследники обычно только find (select) методы.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 26 августа 2009 г. 15:34, спустя 11 минут

    Я использую plain sql и не заморачиваюсь
    adw/0
  • md5

    Сообщения: 11948 Репутация: N Группа: в ухо

    Spritz 26 августа 2009 г. 22:43, спустя 7 часов 9 минут 8 секунд

    тоже plain
    все умрут, а я изумруд
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 26 августа 2009 г. 23:46, спустя 1 час 3 минуты 1 секунду

    я жестко разделяю на модель и ресурс модель.
    за прямую работу с базой отвечает ресурс модель.
    все ресурс модели отнаследованы от какого-то MySQL адаптера
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 26 августа 2009 г. 23:47, спустя 1 минуту 2 секунды


    я жестко разделяю на модель и ресурс модель.
    за прямую работу с базой отвечает ресурс модель.
    все ресурс модели отнаследованы от какого-то MySQL адаптера
    покажи как это все выглядит у тебя?
    adw/0
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 26 августа 2009 г. 23:47, спустя 34 секунды

    так же использую ОРМ Propel.
    Давно хочу попробовать Doctrine но както руки не доходят…   =(
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 26 августа 2009 г. 23:53, спустя 5 минут 57 секунд

    NRG, прибл через часик отпишусь, сейчас просто выхожу на работу и нет времени рисовать =)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 26 августа 2009 г. 23:54, спустя 39 секунд

    =)
    adw/0
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 27 августа 2009 г. 1:24, спустя 1 час 29 минут 37 секунд

    в аттаче запринтскринена структура модуля.
    каждый из модулей имеет подобную структуру.

    в папке Model лежат модели.
    в папке Model/Mysql4 лежат ресурс модели.

    кусочек файла Tag/Model/Tag.php :
    <?php
    class Mage_Tag_Model_Tag extends Mage_Core_Model_Abstract
    {
    protected function _construct()
    {
    $this->_init('tag/tag');
    }

    public function loadByName($name)
    {
    $this->_getResource()->loadByName($this, $name);
    return $this;
    }

    public function getEntityCollection()
    {
    return Mage::getResourceModel('tag/product_collection');
    }

    public function getCustomerCollection()
    {
    return Mage::getResourceModel('tag/customer_collection');
    }


    кусочек файла Tag/Model/Mysql4/Tag.php :
    <?php
    class Mage_Tag_Model_Mysql4_Tag extends Mage_Core_Model_Mysql4_Abstract
    {
    protected function _construct()
    {
    $this->_init('tag/tag', 'tag_id');
    }

    public function loadByName($model, $name)
    {
    if( $name ) {
    $read = $this->_getWriteAdapter();
    $select = $read->select();
    if (Mage::helper('core/string')->strlen($name) > 255) {
    $name = Mage::helper('core/string')->substr($name, 0, 255);
    }

    $select->from($this->getMainTable())
    ->where('name = ?', $name);
    $data = $read->fetchRow($select);

    $model->setData( ( is_array($data) ) ? $data : array() );
    } else {
    return false;
    }
    }

    public function addSummary($object)
    {
    $select = $this->_getWriteAdapter()->select()
    ->from($this->getTable('summary'))
    ->where('tag_id = ?', (int)$object->getId())
    ->where('store_id = ?', (int)$object->getStoreId())
    ->limit(1);

    $row = $this->_getWriteAdapter()->fetchRow($select);
    if ($row) {
    $object->addData($row);
    }
    return $object;
    }
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 августа 2009 г. 1:25, спустя 1 минуту 28 секунд

    Ясно, а чем это удобно?
    adw/0
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 27 августа 2009 г. 1:29, спустя 4 минуты 13 секунд

    четкое распределение обязаностей между классами.
    ресурс модели работают с субд (или любым хранилищем данных).
    модели работают с данными получеными от ресурс модели.

    насчет удобства, то кому как, мне так нравится, мне удобно.
    Спустя 69 сек.
    на самом деле можно было обойтись просто моделью.
    т.е. тут просто добавлена еще одна прослойка =)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 августа 2009 г. 1:36, спустя 7 минут 6 секунд

    У меня "просто модель" занимается выборкой данных из БД, я даже не задумывался о еще одной прослойке…
    adw/0
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 27 августа 2009 г. 1:40, спустя 3 минуты 40 секунд

    насчет удобства, то кому как, мне так нравится, мне удобно.

    =)
    подчеркну, я не считаю это решение идеальным и безупречным.
    я просто поделился тем, как это реализовано у меня
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 августа 2009 г. 1:42, спустя 2 минуты

    Ясно, интересно, но не понятно зачем… Кстати, MySQL4 почему?
    adw/0
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 27 августа 2009 г. 1:53, спустя 10 минут 33 секунды

    Потому что эта ресурс-модель работает с mysql, начиная с версии 4.1

Пожалуйста, авторизуйтесь, чтобы написать комментарий!