Скажем, у вас есть следующие отношения (изменены для простоты):
Dog:
columns:
id: { type: integer, notnull: true, primary: true }
name: { type: string, notnull: true }
AwardType:
columns:
id: { type: integer, notnull: true, primary: true }
name: { type: string, notnull: true }
Award:
columns:
dog_id: { type: integer, notnull: true, primary: true }
award_id: { type: integer, notnull: true, primary: true }
is_granted: { type: boolean, notnull: true, default: false }
relations:
Dog:
local: dog_id
foreign: id
type: one
foreignType: many
foreignAlias: Awards
AwardType:
local: award_id
foreign: id
type: one
foreignType: many
foreignAlias: Awards
С помощью описанной выше настройки я могу добавить новую собаку и вручную добавить награды этой собаке. Я также могу редактировать награды, уже предоставленные собаке.
Когда я вызываю $ myDog-> getAwards (), я хочу, чтобы в набор были включены все предоставленные награды (Award.is_granted == true && Award.dog_id == $ myDog () -> getId ()), чтобы слить все награды, которые имеют этой собаке еще не было предоставлено.
Есть ли опция, которую можно установить в модели где-нибудь, чтобы это произошло? Если нет, то как лучше всего это сделать?
Я использую Symfony 1.4 и ORM от Doctrine 1.2.
[Редактировать 1]
Я понимаю, что не объяснил всю эту награду должным образом, поэтому я попытаюсь остановиться на этом. Допустим, у вас есть следующие типы наград:
- 1: Кость для не приставшего почтальона
- 2: ошейник, чтобы не кусать мисс Молли
- 3: Большая кость для погони за молочником (которого мы все знаем, это зло)
Dog1 уже зарегистрирован и получил AwardTypes 1 и 3. При редактировании этого Dog форма должна отображать AwardTypes 1 и 3 с установленным флажком, а AwardType 2 - без установленного флажка. Это прекрасно работает, если у собаки 1 есть одна запись в таблице наград для каждого из типов призов. Два с is_granted == true и один is_granted == false. Пока все хорошо.
Когда пользователь вводит новую Собаку, форма должна отображать все типы AwardTypes, но без отмеченных флажков. При сохранении новой собаки в таблице «Награды» должно появиться всего 3 строки с установленным флагом is_granted в соответствии с состоянием флажков.
Я знаю, что могу получить все AwardTypes и проверить, что против AwardTypes собака уже была предоставлена (показывая все непроверенные для новых собак, предоставленные проверенные + еще не предоставленные непроверенными для существующих собак). Здесь я спрашиваю, есть ли в Doctrine какая-то магия, которая даст мне сложные наборы, как описано выше.