Форум → Программирование → PHP для идиотов → DBAL
DBAL
-
Собственно, сабж - у кого как организован уровень абстрации данных? Используете ли ORM'ы? Может собственные решения? Или какие-нибудь интересные источники посоветуйте.
Сам сейчас остановился на паттерне TableGateway. Есть базовый класс с методами findById, insert, update, delete (которые для большинства таблиц одинаковы, отличаются только наборами полей). Классы-наследники обычно только find (select) методы. -
27 августа 2009 г. 2:34, спустя 11 минут
Я использую plain sql и не заморачиваюсьhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
-
27 августа 2009 г. 10:46, спустя 1 час 3 минуты 1 секунду
я жестко разделяю на модель и ресурс модель.
за прямую работу с базой отвечает ресурс модель.
все ресурс модели отнаследованы от какого-то MySQL адаптера -
27 августа 2009 г. 10:47, спустя 1 минуту 2 секунды
покажи как это все выглядит у тебя?
я жестко разделяю на модель и ресурс модель.
за прямую работу с базой отвечает ресурс модель.
все ресурс модели отнаследованы от какого-то MySQL адаптераhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
27 августа 2009 г. 10:47, спустя 34 секунды
так же использую ОРМ Propel.
Давно хочу попробовать Doctrine но както руки не доходят… =( -
27 августа 2009 г. 10:53, спустя 5 минут 57 секунд
NRG, прибл через часик отпишусь, сейчас просто выхожу на работу и нет времени рисовать =) -
27 августа 2009 г. 10:54, спустя 39 секунд
=)https://smappi.org/ - платформа по созданию API на все случаи жизни -
27 августа 2009 г. 12: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;
} -
27 августа 2009 г. 12:25, спустя 1 минуту 28 секунд
Ясно, а чем это удобно?https://smappi.org/ - платформа по созданию API на все случаи жизни -
27 августа 2009 г. 12:29, спустя 4 минуты 13 секунд
четкое распределение обязаностей между классами.
ресурс модели работают с субд (или любым хранилищем данных).
модели работают с данными получеными от ресурс модели.
насчет удобства, то кому как, мне так нравится, мне удобно.Спустя 69 сек.на самом деле можно было обойтись просто моделью.
т.е. тут просто добавлена еще одна прослойка =) -
27 августа 2009 г. 12:36, спустя 7 минут 6 секунд
У меня "просто модель" занимается выборкой данных из БД, я даже не задумывался о еще одной прослойке…https://smappi.org/ - платформа по созданию API на все случаи жизни -
27 августа 2009 г. 12:40, спустя 3 минуты 40 секунд
насчет удобства, то кому как, мне так нравится, мне удобно.
=)
подчеркну, я не считаю это решение идеальным и безупречным.
я просто поделился тем, как это реализовано у меня -
27 августа 2009 г. 12:42, спустя 2 минуты
Ясно, интересно, но не понятно зачем… Кстати, MySQL4 почему?https://smappi.org/ - платформа по созданию API на все случаи жизни -
27 августа 2009 г. 12:53, спустя 10 минут 33 секунды
Потому что эта ресурс-модель работает с mysql, начиная с версии 4.1
Пожалуйста, авторизуйтесь, чтобы написать комментарий!