Испольование в одной таблице пары instance_id, instance_type в Doctrine
Здравствуйте,
столкулся с проблемой в doctrine.
Представьте есть три основных таблицы — participant, team, region.
Еще одна, пусть называется log, в которой храняться абсолютно одинаковые по структуре данные — rank, points, position и так далее для каждого объекта из первых таблиц.
Необходимо сделать так, чтобы по instance_id и instance_type можно было связать две таблицы — log и какую-то из основных, в зависимости от instance_type.
На первый взгляд все довольно просто, но после того как описал через обычный Doctrine_Query::create() и leftJoin, или через Doctrine_RawQuery::create() выдается ошибка, что не можен провести «гидрацию», т.к. у объекта Log нету связи на instance.
Если кто-то стыкался с такой трудностью, подскажите, пожалуйста, решение.
Если не подходит такой вариант рассмотрите возможность создания общего примарикей (возможно ещё какие-то поля будут общие) для инстансов, то есть вместо instance_id и instance_type в log хранится inctance_id, но он общий для двух таблиц и связь происходит либо непосредственно через него (тогда надо обеспечить уникальность id в обеих таблицах, простой автоинкремент не подойдёт), либо создать ещё одну таблицу с полями id (автоинкрементное, по которому связь идёт с log), instance1_id, instance2_id + другие общие поля. В общем паттерн «наследование с таблицами для каждого класса» (если не напутал).
Как-то пробовал решать подобную задачу, но у меня число типов было неограниченно и одним SQL так и не смог её решить
Решил пойти по самому легкому пути, т.к. нужно было сделать быстро и «чтобы работало».
Вышел из положения, что в log есть 3 поля:
participant_id, team_id, region_id. Понятно, что не очень хорошо, но работает.
И да, монго бы тут подошла, но нужно было штатными средствами, да и опыта работы с монго нету.