Связи в Table Data Gateway - ORM

AmdY

Пью пиво
Команда форума
Решил что моей модели не хватает связей с другими моделями, решил ввести foreign key mapping
вроде всё красиво, но просто связать оказалось недостаточно, когда выгребаю связанные данные из другой таблицы через lazy load, от хочется применить дополнительный фильтр
PHP:
есть
SELECT * FROM foreignTable WHERE  foreignKey = $this->id
хочется дополнительный фильтр по языку
SELECT * FROM foreignTable WHERE  foreignKey = $this->id AND lang = $this->lang
    protected $_relation = array(
        'Contact' => array(
            'table' => 'user_contact', // 'model' => 'Model_User_Contact',
            'local' => 'id',
            'foreign' => 'id_user',
            'type' => Model_User::RELATION_TYPE_ONE
        ),
        'Place' => array(
            'table' => 'user_footballer_place',
            'local' => 'id',
            'foreign' => 'id_user',
            'type' => Model_User::RELATION_TYPE_MANY,
            'filter' => array('lang = ?') // вот не знаю как лучше сделать данный кусок
        ),
    );
как бы синтаксически красиво это оформить и посмотреть как делают другие. Чёта в доктрине не могу вспомнить где было. Ну и как это реализовать погибче?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
AmdY, может, возьмешь реализацию Active Record и не будешь изобретать велосипед? :)
 

AmdY

Пью пиво
Команда форума
grigori
поздно, меня чёт торкнуло, убил день и получилось вроде ничего, минимум функционала, минимум кода, mysql only, очень лёгкий. Она мне нужна только для простейших операций:
find, findOne, findAll, findWithPager, insert, update, updateById, delete, кустомные get-set коли определены. осталось прикрутить простейшую поддержку связанных данных и маппер, чтобы делать fromArray и не беспокоиться об отсутствующих полях.
самое главное ради чего взялся переписывать, это лишние переменные, раньше методы возращали массивы, а сейчас инкапсулируют их в себе
PHP:
$obj = new Model();
$obj->find(1);  // раньше повсюду было $data = $obj->fetchOneById(1);
echo $obj['title']; // array acces ещё не прикрутил
$obj->findAll();
foreach($obj AS $item) { echo $item['title']; }
я бы пользовался доктриной, но вторая ветка меня бесит своим апи. да и не хочу ORM, всё заворачивать в объекты
 

AmdY

Пью пиво
Команда форума
pilot911
всем, они полностью изменили именование. всунули эти уродские неймспэйсы, phpDoc для анатоций
Ладно, начали переписывать на 5.3, так сделали бы на __callStatic
 

pilot911

Новичок
pilot911
всем, они полностью изменили именование. всунули эти уродские неймспэйсы, phpDoc для анатоций
Ладно, начали переписывать на 5.3, так сделали бы на __callStatic
мм.. да вроде бы не очень напрягает, привыкаешь

меня напрягает то, что идея EAV аля битрикс тут возможна только ручным кодингом с добавлением полей в Entity

то есть, как я понимаю, даже если конфигурировать поля не через аннотации, а через XML или PHP маппинг - эти поля по-любому должны быть прописаны в коде аля protected $username
 
Сверху