Отношения MN в Доктрине

ZF имеет очень хорошую функцию, которую называют findManyToManyRowset, который возвращает Вас непосредственно набор объектов от соединения MN. Целая цель MN состоит в том, чтобы получить информацию от другой таблицы, не от таблицы соединений.

У нас есть эта схема:

- users
  - id
  - name

- groups
  - id
  - name

- user_has_groups
  - user_id
  - group_id

Я хочу создать функцию пользователя, которая возвратит непосредственно набор объектов группы и не набор объектов user_has_groups.

$user->UserHasGroups ;// returns a collection of user_has_groups
$user->Groups; // returns Doctrine_Record_UnknownPropertyException 

Существует ли способ сделать это непосредственно?

1
задан Elzo Valugi 25 June 2010 в 15:59
поделиться

1 ответ

Doctrine обрабатывает это автоматически, если ваша схема настроена правильно. Я использую Doctrine только как часть Symfony, поэтому мой schema.yml будет выглядеть примерно так. Вам может потребоваться изменить его, если ваша установка Doctrine использует другой метод для определения вашей схемы:

Users:
  columns:
    name:
      type: string
  relations:
    Groups:
      refClass: UserHasGroups
      local: user_id
      foreign: group_id

Groups:
  columns:
    name:
      type: string
  relations:
    Users:
      refClass: UserHasGroups
      local: group_id
      foreign: id

UserHasGroups
  columns:
    user_id:
      type: integer
      primary: true
    group_id:
      type: integer
      primary: true

Doctrine будет использовать класс UserHasGroups как таблицу соединения «многие ко многим». Затем, вызвав $ user-> Groups , вы получите все связанные объекты Groups .

В качестве примечания, я бы изменил ваши названия моделей на единственное число, например User , Group . $ user = new Users () на первый взгляд подразумевает, что вы создаете несколько пользователей за один раз, что, я полагаю, это не так: -)

См. Документацию Doctrine join table docs для получения дополнительных сведений.

2
ответ дан 2 September 2019 в 23:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: