Маппинг ActiveRecord/attribute -> Table/Field
Маппинг ActiveRecord/attribute -> Table/Field
Столкнулся с необходимостью наличия маппинга, которой сейчас нету.
Очень необходимая вещь (ибо не хочется иметь поля типа ProductAttributeID).
Пока что написал собственную простейшую реализацию с некоторыми недостатками.
Для нормальной работы встроенных виджетов (например, CGridView), пришлось некоторые классы переопределять (вплоть до CSort), что в принципе очень нежелательно.
Если хотя бы сейчас не озаботиться реализацией данной функции, то в дальнейшем это может быть еще более накладно.
В общем, очень хочется иметь встроенную функцию маппинга!
Очень необходимая вещь (ибо не хочется иметь поля типа ProductAttributeID).
Пока что написал собственную простейшую реализацию с некоторыми недостатками.
Для нормальной работы встроенных виджетов (например, CGridView), пришлось некоторые классы переопределять (вплоть до CSort), что в принципе очень нежелательно.
Если хотя бы сейчас не озаботиться реализацией данной функции, то в дальнейшем это может быть еще более накладно.
В общем, очень хочется иметь встроенную функцию маппинга!
[Редкие] Записки пещерного человека
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Маппинг ActiveRecord/attribute -> Table/Field
Использовать гетеры и сетеры не спасает?
Код: Выделить всё
public function getProduct_attribute_id()
{
return $this->productAttributeID;
}
Жду Yii 3!
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: Маппинг ActiveRecord/attribute -> Table/Field
У меня было, но, неэффективным оказалось и я стер код. Примерно так:
Как-то так.
Код: Выделить всё
protected $_mapped=array(
'attr1'=>'attr2',
//....
);
public function __get($attr)
{
if(in_array($attr,$this->_mapped)){
$attr=$this->_mapped[$attr];
}
return parent::__get($attr);
}
public function __set($attr,$val)
{
if(in_array($attr,$this->_mapped)){
$attr=$this->_mapped[$attr];
}
return parent::__set($attr);
}
Re: Маппинг ActiveRecord/attribute -> Table/Field
Ну вот как-то так.Ekstazi писал(а):У меня было, но, неэффективным оказалось и я стер код....
Как-то так.
Хочется универсального решения, в котором карта задается простым массивом.
Еще есть проблема, при которой требуется получать флипнутый массив (column -> attribute), в CGridView как раз столкнулся с этим.
[Редкие] Записки пещерного человека
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Маппинг ActiveRecord/attribute -> Table/Field
Кажется, вот тут обсуждают примерно то же: http://www.yiiframework.com/forum/index ... l-binders/
Нравится Yii? Давайте сделаем его лучше!.
Re: Маппинг ActiveRecord/attribute -> Table/Field
Особо не вчитывался, но, по-моему, это не то.Sam Dark писал(а):Кажется, вот тут обсуждают примерно то же: http://www.yiiframework.com/forum/index ... l-binders/
Я имею ввиду ORM маппинг (неправильно, конечно, называю...), например:
Код: Выделить всё
array(
'id' => 'Element_ID',
'page_id' => 'Page_ID',
'type' => 'Element_Type',
'content' => 'Element_Content',
'default' => 'Element_Default'
);
Вторая часть проблемы возникает при конструировании критериев запросов. В некоторых параметрах критериев мы задаем имена столбцов, но маппинг подразумевает абстрагирование от этих имен и предполагает использование внутренних имен.
Код: Выделить всё
$el = Element::model()->find(array(
'select' => 'Element_Content',
'condition' => 'Element_ID=:id',
'params' => array(':id'=>2)
));
Сейчас я сделал так:
Код: Выделить всё
$el = Element::model()->find(array(
'select' => Element::MAP('content'),
'condition' => Element::MAP('id').'=:id',
'params' => array(':id'=>2)
));
Код: Выделить всё
$el = Element::model()->find(array(
'select' => '[[content]]',
'condition' => '[[id]]=:id',
'params' => array(':id'=>2)
));
Код: Выделить всё
$el = Element::model()->find(array(
'select' => '[[Element.content]]',
'condition' => '[[Element.id]]=:id',
'params' => array(':id'=>2)
));
[Редкие] Записки пещерного человека
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Маппинг ActiveRecord/attribute -> Table/Field
Я Qiang-у в своё время предлагал абстрагировать ещё и запросы, но ему идея не понравилась. Быть может в Yii2…
Нравится Yii? Давайте сделаем его лучше!.
Re: Маппинг ActiveRecord/attribute -> Table/Field
Эх, будем ждать
А то мне нечего сказать на фразу "Вот в дотнет и яве есть маппинг, а в вашем пхп нету" ))
А то мне нечего сказать на фразу "Вот в дотнет и яве есть маппинг, а в вашем пхп нету" ))
[Редкие] Записки пещерного человека
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Маппинг ActiveRecord/attribute -> Table/Field
Да есть и в PHP маппинг. В том же Propel вроде был, но там мапить замучаешься.
Нравится Yii? Давайте сделаем его лучше!.
Re: Маппинг ActiveRecord/attribute -> Table/Field
Да есть-то есть, но зачем подключать стороннюю библиотеку ORM, когда очень удобная встроенная есть.
[Редкие] Записки пещерного человека
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Маппинг ActiveRecord/attribute -> Table/Field
Я про «а в вашем пхп нету» Встроена у нас не ORM, а AR.
Нравится Yii? Давайте сделаем его лучше!.
Re: Маппинг ActiveRecord/attribute -> Table/Field
На дворе конец 2012 годаТут ключи - свойства объекта данного типа (Element), а значения - имена столбцов в соответствующей таблице.Код: Выделить всё
array( 'id' => 'Element_ID', 'page_id' => 'Page_ID', 'type' => 'Element_Type', 'content' => 'Element_Content', 'default' => 'Element_Default' );
А сейчас такой маппинг есть?
Re: Маппинг ActiveRecord/attribute -> Table/Field
Версия Yii как была 1 так и осталась...woooo писал(а): На дворе конец 2012 года
А сейчас такой маппинг есть?
Так что ждем, что будет в Yii2
[Редкие] Записки пещерного человека