symfony / doctrine getOrganisation () для сотрудника возвращает строку (но мне нужен объект) - PullRequest
0 голосов
/ 12 сентября 2011

Я работаю над проектом с Symfony 1.4 и доктриной.1.2

В моем schema.yml я определил сотрудника и организацию:

employee:
  tableName: employee
  columns:
    id:
      primary: true
      type: integer(8)
      notnull: true
      autoincrement: true
    organization:
      default: NULL
      type: integer
  relations:
    organization:
      onDelete: restrict
      local: organization
      foreign: id
organization:
  tableName: organization
  columns:
    id:
      primary: true
      unique: true
      type: integer
      notnull: true
      autoincrement: true
  relations:
    employee:
      type: many
      class: employee
      local: id
      foreign: organization

Затем я запускаю команду symfony doctrine:build --all --and-load, это (повторно) создает базу данных с таблицами иphp-классы согласно schema.yml.

Так что, когда я сейчас сделаю $employee->getOrganization() (при условии, что $ employee принадлежит к классному сотруднику), я ожидаю получить объект организации класса.Но я получаю строку с содержимым поля id организации.Когда я пытаюсь сделать это наоборот: $organization->getEmployee() (при условии, что $ organization относится к классовой организации), он возвращает коллекцию Doctrine_Collection со всеми сотрудниками.

Как мне getOrganization() вернуть объект организации?

1 Ответ

2 голосов
/ 12 сентября 2011

Это не работает, потому что ваше локальное поле и отношение имеют одно и то же имя («организация»).

Лучше следовать указаниям доктрины по именованию:

employee:
  tableName: employee
  columns:
    id:
      primary: true
      type: integer(8)
      notnull: true
      autoincrement: true
    organisation_id:   # renamed to 'organisation_id'
      default: NULL
      type: integer
  relations:
    Organisation:      # capitalized
      onDelete: restrict
      local: organisation_id #renamed to 'organisation_id'
      foreign: id

Теперь вы можете получить идентификатор, используя $employee->organisation_id или $employee->getOrganisationId(), а организацию, например, $emplyee->Organisation или $employee->getOrganisation().

...