Я хотел бы получить помощь от сообщества, если это возможно.
У нас есть проект в работе, и пришло время рефакторинга. Мы используем PHP 5 и Propel 1.6 в качестве слоя ORM. Идея, на самом деле, довольно проста: мы пытаемся получить всю необходимую информацию одновременно.
Однако эта информация не всегда имеет прямое отношение к основному классу (или, другими словами, к основной таблице). Например:
return (
$this->leftJoin( "IES.Pessoa mant" )
->leftJoin( "mant.Papel subpapel" )
->where( "subpapel.tipo = ?", Tipo_papel::IES )
->leftJoin( "subpapel.RelacionamentoRelatedByIdSubPapel relm" )
->where( "relm.tipo = ?", Tipo_relacionamento::MANTENEDORA_IES )
->leftJoin( "relm.PapelRelatedByIdSuperPapel superpapel" )
->leftJoinWith( "superpapel.Pessoa iesm" )
->where( 'superpapel.tipo = ?', Tipo_papel::MANTENEDORA_IES )
);
Это код функции в ModelCriteria из нашего уровня модели. Идея состоит в том, чтобы получить «IESM», связанный с одним «IES».
Но, здесь у нас есть проблема. Бывает, что «IES» уже относится к одному объекту «Пессоа». Итак, когда этот код применяется, этот объект будет потерян, освободив место для сущности «Pessoa», связанной с «iesm».
Итак, основной вопрос: я хотел бы установить свойство iesm внутри объекта IES, а не Pessoa, которое установлено из-за отображения Propel. Как я могу это сделать? Это вообще возможно? Я хотел бы установить «iesm» на основе псевдонима, созданного на leftJoinWith.
И еще вопрос, который проявился сразу после этого: если в базе данных нет прямого отношения, как я могу установить этот объект, используя ту же идею? Попытка объяснить лучше: этот «iesm» на самом деле является объектом типа «Pessoa_juridica». И «Pessoa_juridica» не имеет прямого отношения к «IES». Как это «Pessoa_juridica» могло быть установлено внутри объекта «IES»?
Я даже не знаю, лучший ли это способ его использования, поэтому любые другие идеи приветствуются. Если вам нужны дополнительные объяснения, просто дайте мне знать.
ORM
. Я просто предлагаю вам спросить на форуме Propel. - person diEcho   schedule 17.11.2011