2011-01-12 12 views
0

hier ist meine schema.yml Dateien:Doktrin: Build - Model und - SQL ok aber Doktrin: Insert-SQL ist nicht. Weißt du, warum?


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 

Auch wenn ich php symfony Lehre laufen: --model und php symfony Lehre bauen: bauen --sql nichts geht schlecht. "Php symfony Lehre: insert-sql" macht diesen Fehler:


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 

Danke für Ihre Hilfe, Erman.

Antwort

3

Sie haben Ihre Definition ein bisschen falsch.

Local sollte der Name des Feldes in der aktuellen Tabelle sein, und das Feld in der fremden Tabelle - Sie haben diese in die falsche Richtung.

Normalerweise definieren Sie nur ein Ende der Beziehung - doctrine auto fügt die Inverse der anderen Tabelle hinzu und erhält 99% der Zeit die richtige Einstellung. Wenn Sie es manuell tun, müssen sie übereinstimmen. Entfernen Sie in diesem Fall die Artikelbeziehung aus Problemen und die Kommentarbeziehung aus Artikeln.

Kommentare haben kein Artikel-ID-Feld.

Foreign Alias ​​ist nicht erforderlich, aber Sie haben es falsch herum - es ist, was die aktuelle Tabelle/Objekt als in der Tabelle/Objekt am Ende der Beziehung bezeichnet wird. Wird standardmäßig auf den Namen des aktuellen Objekts gesetzt und kann daher oft ignoriert werden.

Wenige andere kleine Niggles zu. Bei einer Schätzung, ich denke, dieses Schema wird Sie tun:

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 
+0

vielen Dank für Ihre Antwort. es war so nützlich. ich dachte wie ein Fremdschlüssel für ein lokal-fremdes. jetzt verstanden, ist es nicht. (; auch ich habe noch ein paar Dinge gelernt. Danke nochmal! Benlumley! –

+0

cool - gut zu wissen, dass es hilfreich war – benlumley