Идея таблиц перекрестных ссылок введена в Propel 1.5.Это означает, что объект может получить список связанных элементов, как если бы это было отношение «один ко многим».Таким образом, в отношениях «человек-группа» человек может позвонить getGroups()
, а группа может позвонить getPersons()
.
. Это значительно облегчает работу.Однако, если у сущности есть отношение «многие ко многим», имена вызовов функций становятся более сложными.Например, следующее разрешает группам содержать группы внутри себя:
group:
id: ~
name: { type: varchar(255) }
sub_group:
group_id:
type: integer
primaryKey: true
foreignTable: group
foreignReference: id
required: true
sub_group_id:
type: integer
primaryKey: true
foreignTable: group
foreignReference: id
required: true
Для этого отношения Propel генерирует неловко названные функции getGroupsRelatedByGroupId()
и getGroupsRelatedBySubGroupId()
.Это долго и не сразу очевидно.Как пользователь этой сущности, я бы предпочел использовать функции getParentGroups()
и getSubGroups()
, которые я могу понять более четко.Можно ли сказать Propel переименовать эти функции?Атрибут phpName
, похоже, не делает этого.
Проблема также возникает с отношениями один-ко-многим, как в очень упрощенном примере ниже:
child:
id: ~
father_id:
type: integer
foreignTable: person
mother_id:
type: integer
foreignTable: person
Выше,Дочернему объекту будут даны функции getPersonRelatedByFatherId()
и getPersonRelatedByMotherId()
, когда сразу должно быть очевидно, что getMother()
и getFather()
будут работать лучше.Можно написать пользовательские функции, которые делают это, но было бы гораздо разумнее определить это в схеме.