2016-05-14 8 views
1

Ich benutze Symfony/YaML/Doctrine um Daten in einem MySQL Backend zu speichern. Ich möchte einen Index erstellen (um Abfragen zu beschleunigen), indem ich einige der von mir deklarierten FKs verwende. Allerdings, wenn ich versuche, das Schema zu generieren, erhalte ich folgende Fehlermeldung:Doctrine DBAL Schema SchemaException: Wie man eine oder mehrere FKs in einen deklarierten Tabellenindex einbezieht

[Doctrine\DBAL\Schema\SchemaException] There is no column with name 'to_user_id' on table 'pms'

Wenn ich den Index Erklärung auf Kommentar, ich bin in der Lage, die Tabelle ohne Probleme zu erzeugen. Dies ist, was meine YAML-Datei wie folgt aussieht:

AppBundle\Entity\PrivateMessage: 
    type: entity 
    table: pms 
    repositoryClass: PMSRepository 
    id: 
     id: 
      type: integer 
      generator: { strategy: AUTO } 

    manyToOne: 
     from_user: 
      targetEntity: User 
      joinColumn: 
       name: from_user_id 
       referencedColumnName: id 
       nullable: false 
       onDelete: RESTRICT 
       onUpdate: CASCADE 

    manyToOne: 
     to_user: 
      targetEntity: User 
      joinColumn: 
       name: to_user_id 
       referencedColumnName: id 
       nullable: false 
       onDelete: RESTRICT 
       onUpdate: CASCADE     

    manyToOne: 
     message_type: 
      targetEntity: PrivateMessageType 
      joinColumn: 
       name: pms_type_id 
       referencedColumnName: id 
       nullable: false 
       onDelete: RESTRICT 
       onUpdate: CASCADE 


    manyToOne: 
     message_status: 
      targetEntity: PrivateMessageStatus 
      joinColumn: 
       name: pms_status_id 
       referencedColumnName: id 
       nullable: false 
       onDelete: RESTRICT 
       onUpdate: CASCADE 

    indexes: 
     idx_pms: 
      columns: [from_user_id, to_user_id, created_at]   


    fields: 
     subject: 
      type: text 
      nullable: false 

     body: 
      type: text 
      nullable: false 

     attach_1: 
      type: string 
      length: 128 
      nullable: true 

     attach_2: 
      type: string 
      length: 128 
      nullable: true 

     attach_3: 
      type: string 
      length: 128 
      nullable: true 

     created_at: 
      type: datetime   

Antwort

0

Das Problem ist einfach: Sie spalten nicht alle Verbände und Vereine in mehreren manyToOne. Die richtige Variante sollte wie folgt sein:

AppBundle\Entity\PrivateMessage: 
    type: entity 
    table: pms 
    repositoryClass: PMSRepository 
    id: 
     id: 
      type: integer 
      generator: { strategy: AUTO } 

    manyToOne: 
     from_user: 
      targetEntity: User 
      joinColumn: 
       name: from_user_id 
       referencedColumnName: id 
       nullable: false 
       onDelete: RESTRICT 
       onUpdate: CASCADE 
     to_user: 
      targetEntity: User 
      joinColumn: 
       name: to_user_id 
       referencedColumnName: id 
       nullable: false 
       onDelete: RESTRICT 
       onUpdate: CASCADE     
     message_type: 
      targetEntity: PrivateMessageType 
      joinColumn: 
       name: pms_type_id 
       referencedColumnName: id 
       nullable: false 
       onDelete: RESTRICT 
       onUpdate: CASCADE 
     message_status: 
      targetEntity: PrivateMessageStatus 
      joinColumn: 
       name: pms_status_id 
       referencedColumnName: id 
       nullable: false 
       onDelete: RESTRICT 
       onUpdate: CASCADE 

    indexes: 
     idx_pms: 
      columns: [from_user_id, to_user_id, created_at]   


    fields: 
     subject: 
      type: text 
      nullable: false 

     body: 
      type: text 
      nullable: false 

     attach_1: 
      type: string 
      length: 128 
      nullable: true 

     attach_2: 
      type: string 
      length: 128 
      nullable: true 

     attach_3: 
      type: string 
      length: 128 
      nullable: true 

     created_at: 
      type: datetime   
+0

Hehehe, das habe ich heute Morgen herausgefunden, nach einer guten Nacht! –