doctrine: build --model и --sql нормально, но doctrine: insert-sql нет. Ты знаешь почему? - PullRequest
0 голосов
/ 12 января 2011

вот мои файлы schema.yml:


issues:
  actAs: { Timestampable: ~ }
  columns:
    issueId: { type: integer(4), notnull: true, primary: true, autoincrement: true }
    issueDateForPublish: { type: timestamp, notnull: true }
    issueName: { type: string(255), notnull: true }
    issueCoverArticleId: { type: integer(4), notnull: true }
  relations:
    articles:
      class: articles
      foreignAlias: article
      local: articleId
      foreign: issueId
      type: many

articles:
  actAs: { Timestampable: ~ }
  columns:
    articleId: { type: integer(4), notnull: true, primary: true, autoincrement: true }
    articleTitle: { type: string(), notnull: true }
    articleText: { type: string(), notnull: true }
    articleDataForPublish: { type: timestamp, notnull: true }
    articleIsDraft: { type: boolean, notnull: true, default: 1 }
    articleIsOnHold: { type: boolean, notnull: true, default: 0  }
    articleIsModerate: { type: boolean, notnull: true, default: 0 }
    articleIsApprove: { type: boolean, notnull: true, default: 0 }
  relations:
    articles:
      local: issueId
      foreign: articleId
      onDelete: cascade
    comments:
      class: comments
      foreignAlias: comment
      local: commentId
      foreign: articleId
      type: many

comments:
  actAs: { Timestampable: ~ }
  columns:
    commentId: { type: integer(4), notnull: true, primary: true, autoincrement: true }
    commentName: { type: string(255), notnull: true }
    commentSurname: { type: string(255), notnull: true }
    commentMail: { type: string(255), notnull: true }
    commentDataForPublish: { type: timestamp }
    commentIsModerated: { type: boolean, notnull: true, default: 0 }
    commentIsApprove: { type: boolean, notnull: true, default: 0 }
  relations:
    articles:
      local: articleId
      foreign: commentId
      onDelete: cascade

Опять же, когда я запускаю доктрину php symfony: build --model и доктрину php symfony: build --sql ничего не выходит из строя."php symfony doctrine: insert-sql" делает эту ошибку:


SQLSTATE[42000]: Syntax error or access violation: 1072 Key column 'issueid' doesn't exist in table. Failing Query: "CREATE TABLE articles (articleid INT AUTO_INCREMENT, articletitle TEXT NOT NULL, articletext TEXT NOT NULL, articledataforpublish DATETIME NOT NULL, articleisdraft TINYINT(1) DEFAULT '1' NOT NULL, articleisonhold TINYINT(1) DEFAULT '0' NOT NULL, articleismoderate TINYINT(1) DEFAULT '0' NOT NULL, articleisapprove TINYINT(1) DEFAULT '0' NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX issueid_idx (issueid), PRIMARY KEY(articleid)) ENGINE = INNODB". Failing Query: CREATE TABLE articles (articleid INT AUTO_INCREMENT, articletitle TEXT NOT NULL, articletext TEXT NOT NULL, articledataforpublish DATETIME NOT NULL, articleisdraft TINYINT(1) DEFAULT '1' NOT NULL, articleisonhold TINYINT(1) DEFAULT '0' NOT NULL, articleismoderate TINYINT(1) DEFAULT '0' NOT NULL, articleisapprove TINYINT(1) DEFAULT '0' NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX issueid_idx (issueid), PRIMARY KEY(articleid)) ENGINE = INNODB

Спасибо за вашу помощь, Эрман.

1 Ответ

3 голосов
/ 12 января 2011

Вы немного ошиблись в своем определении.

Локальное должно быть именем поля в текущей таблице, а чужое поле - в чужой таблице - у вас они неправильные.

Обычно вы определяете только один конец отношения - доктрина авто добавляет обратное к другой таблице и получает правильное значение в 99% случаев.Если вы делаете это вручную, они должны совпадать.В этом случае удалите отношение статьи из вопросов и отношение комментариев из статей.

Комментарии не имеют поля идентификатора статьи.

Иностранный псевдоним не требуется, но вы ошиблисьнаоборот - это то, что текущая таблица / объект будет называться в таблице / объекте в дальнем конце отношения.По умолчанию используется имя текущего объекта, поэтому его часто можно игнорировать.

Несколько других мелких недочетов.На предположение, я полагаю, эта схема сделает вас:

issue:
  actAs: { Timestampable: ~ }
  columns:
    issueId: { type: integer(4), notnull: true, primary: true, autoincrement: true }
    issueDateForPublish: { type: timestamp, notnull: true }
    issueName: { type: string(255), notnull: true }
    issueCoverArticleId: { type: integer(4), notnull: true }

article:
  actAs: { Timestampable: ~ }
  columns:
    articleId: { type: integer(4), notnull: true, primary: true, autoincrement: true }
    articleTitle: { type: string(), notnull: true }
    articleText: { type: string(), notnull: true }
    articleDataForPublish: { type: timestamp, notnull: true }
    articleIsDraft: { type: boolean, notnull: true, default: 1 }
    articleIsOnHold: { type: boolean, notnull: true, default: 0  }
    articleIsModerate: { type: boolean, notnull: true, default: 0 }
    articleIsApprove: { type: boolean, notnull: true, default: 0 }
    issueId: { type: integer(4) }
  relations:
    issue:
      local: issueId
      foreign: issueId
      foreignAlias: articles
      onDelete: cascade

comment:
  actAs: { Timestampable: ~ }
  columns:
    commentId: { type: integer(4), notnull: true, primary: true, autoincrement: true }
    commentName: { type: string(255), notnull: true }
    commentSurname: { type: string(255), notnull: true }
    commentMail: { type: string(255), notnull: true }
    commentDataForPublish: { type: timestamp }
    commentIsModerated: { type: boolean, notnull: true, default: 0 }
    commentIsApprove: { type: boolean, notnull: true, default: 0 }
    articleId: { type: integer(4) }
  relations:
    article:
      local: articleId
      foreign: articleId
      onDelete: cascade
      foreignAlias: comments
...