2017-03-21 6 views
1

という名前の複合主キーを設定することはできません。現時点では、ローダーコマンドは単純な主キーを持つテーブルでうまく動作しています。しかし、今私は(3つの列の)合成された主キーで構成されるテーブルを持っています。 2つの列(「id」と「language」)は、別の表への外部キーです(1:n関係)。ドクトリン2 - 私は、現時点では私はその後orm.yml・ファイルおよびロード・データベース・フィクスチャでMySQLデータベースを生成する治具ローダコマンドを、書いている「ID」

私は治具ローダコマンドの呼び出しを行い、このエラーメッセージ、取得しています:

Message: An exception occurred while executing 'INSERT INTO xyzInt (id, language, name, text, update, userID, complete) VALUES (?, ?, ?, ?, ?, ?, ?)' with params [null, "com", "peter", "text", "2017-03-06 18:00:00", 1, 0]: 
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update, userID, complete) VALUES (NULL, 'com', 'peter', 'text', '2017-03-' at line 1 

をそして、私のxyzInt.orm.ymlは次のようになります。

Entity\Xyzint: 
    type: entity 
    table: xyzInt 

    id: 
    id:  { type: integer, options: { default: 0, unsigned: true }, generator: { strategy: NONE } } 
    language: { type: string, length: 2, options: { default: '' }, generator: { strategy: NONE } } 
    name:  { type: string, length: 30, options: { default: '' }, generator: { strategy: NONE } } 

    fields: 
    ... 

    manyToOne: 
    Abc: 
     targetEntity: Abc 
     inversedBy: Xyzint 
     joinColumn: 
     name: id 
     referencedColumnName: abcID 

そして今、私は」 2つの質問があります:

  1. フィールド "id"が正しく設定されていない(nullのままです)のはなぜですか?
  2. manyToOne相関が複合主キーのために正しく行われていますか?または、私は "joinColumn"の代わりに "joinColumns"を使用する必要がありますか?私は「joinColumnsは」あなたは私の短い例を与えることができます使用する を持っているときに、どのように orm.yml-の構成は次のようになりますか?私は今までgoogleで正しい 答えを見つけることができませんでした。あなたの助けのための

Thanxs。

答えて

0

私はYAMLと快適ではないが、私はあなたがautoにご生成戦略を設定するべきだと思います。このような何か:

id:  { type: integer, options: { default: 0, unsigned: true }, generator: { strategy: AUTO } } 

変更strategy: NONEここ

strategy: AUTOには、YAMLの設定のためのドキュメントです:私が追加したテーブルxyzIntで : http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/yaml-mapping.html

+0

Thanxs。しかし、私は個別に自動生成された特別な値なしでフィールド "id"を設定したい。したがって、私は '$ connection-> query( 'SET FOREIGN_KEY_CHECKS = 0'); 'を使用します。 – Stef

+0

追加の注意:1つの" id "にはさらに多くのデータベースエントリが存在することが許されるべきです。自動生成された "id"は意味をなさない。 – Stef

+0

ドクトリンがあなたのためにそれを行うことができるとき、なぜあなたは自分のIDを設定するのですか?あなたの2番目のコメントでは、実際にはidが複数のエントリに一致することを意味していますか?とにかく、あなたの質問はなぜidがnullであるかということでした。なぜなら、あなたはそれが正しい値を提供していないからです。私の答えと同じように自動的に行うこともできますし、YAMLを使って手動で行う方法もGoogleで確認できます。 – mickdev

1

私は解決策を次のように私の問題を解決しましたこれは新しい単純な主キーとして使用される新しい列です。新しい列の値は、ID、言語、および名前の組み合わせです。 id、language、およびnameの列は、通常の列になり、インデックスが付けられます。あなたの答えのための

関連する問題