Вы не должны проходить через домашних животных, если это вообще возможно: различать типы домашних животных лучше всего для объекта, который имеет с ними связь, или для службы, которая работает с этими объектами.
Один из подходов - добавить метод к Person
, который будет возвращать тип Pet. Мы используем нечто подобное в нашем текущем проекте.
array function getDogs() {
var HQL = "where petType = 'dog'";
return ormGetSession().createFilter(this.getPets(),HQL).list();
}
Вы также можете сделать его более общим:
array function getPets( required string petType ) {
var HQL = "where petType = '" & arguments.petType & "'";
return ormGetSession().createFilter(this.getPets(),HQL).list();
}
Другой подход заключается в использовании атрибута where
в отношениях в объекте Person
при извлечении домашних животных. Мы также используем что-то вроде этого:
property name="cats" type="array" fieldtype="one-to-many" cfc="model.Pets" fkcolumn="PERSON_ID" where="PET_TYPE = 'cat'" lazy="false";
property name="dogs" type="array" fieldtype="one-to-many" cfc="model.Pets" fkcolumn="PERSON_ID" where="PET_TYPE = 'dog'" lazy="false";
Обратите внимание, что в этих примерах делается несколько предположений о структуре вашего приложения и базы данных: в папке model
есть объект Pets, который отображается на таблицу в вашей базе данных; эта таблица имеет столбец PET_TYPE (который сопоставляется со свойством petType), который содержит типы домашних животных в нижнем регистре; объект Person
отображается в таблицу с первичным ключом с именем PERSON_ID
, который также является внешним ключом в таблице Pets
.
Кроме того, при рассмотрении этих и других подходов вы должны подумать о том, как вы собираетесь получать доступ к домашним животным. Отключение отложенной загрузки может привести к снижению производительности, если у вас есть значительное количество домашних животных, особенно если вы хотите сохранить несколько типов (например, вы делаете несколько проходов через таблицу домашних животных при инициализации человека). Вам могут не понадобиться отдельные свойства, если вы не часто заходите в Pets; может быть достаточно просто иметь функцию getPets ().