Самостоятельная ссылка на класс Doctrine 1.2 в Postgres выдает ошибку SQL при сохранении - PullRequest
0 голосов
/ 22 ноября 2011

Я пытаюсь смоделировать пользователя, которого может пригласить другой пользователь. Поэтому я настроил самореференцию один-ко-многим в своей модели доктрины.

User:
  tableName: users
  actAs:
    Timestampable:
  columns:
    id:
      type: integer(11)
      primary: true
      autoincrement: true
    name:
      type: string(255)
      unique: true
    password:
      type: string(255)
    email:
      type: string(255)
    [...]
    invited_by:
      type: integer(11)
  relations:
    Inviter:
      class: User
      type: one
      local: invited_by
      foreign: id
      foreignAlias: Invitees
      onDelete: SET NULL
      onUpdate: CASCADE
  options:
    type: InnoDB
    collate: utf8_unicode_ci
    charset: utf8

Это прекрасно работает в MySQL, но если я пытаюсь сохранить запись с помощью пользовательских объектов save () - метод в Postgres выдает следующую ошибку:

SQLSTATE [42P01]: неопределенная таблица: 7 FEHLER: отношение »users_id« existiert nicht ЛИНИЯ 1: ВЫБЕРИТЕ КРИВАЛ («users_id») ^. Неудачный запрос: "SELECT CURRVAL ('users_id')"

Я думаю, что это что-то, связанное с самоопределением, но я не могу найти ошибку в моем моделировании. Есть идеи по этому поводу?

1 Ответ

1 голос
/ 22 ноября 2011

Имя по умолчанию для последовательности, прикрепленной к столбцу serial , равно tablename_colname_seq currval для получения «текущего значения» последовательности.Так что это должно быть:

SELECT currval('users_id_seq')

Весь ваш синтаксис явно размечен для MySQL.Такие вещи, как type: InnoDB, integer(11) или autoincrement не имеют смысла в Postgres.

...