2

schema.ymlを構築していて、テーブルsf_guard_userに外部キー制約を追加しようとしています。

しかし、doctrine:insert-sql(edit:doctrine:build --all)を実行すると、テーブルとsf_guard_userの間のリンクがありません!私は何かが足りないのですか?

mysql(InnoDB)とSymfony1.4を使用しています

これが私のschema.ymlのサンプルです:

Author:
  connection: doctrine
  tableName: ec_author
  actAs:
    Sluggable:
      fields: [name]
      unique: true
      canUpdate: false
  columns:
    sf_guard_user_id:
      type: integer
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
    name:
      type: string(30)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    contents:
      type: string()
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
  relations:
      User:
        class: sfGuardUser
        foreignType: one
        local: sf_guard_user_id
        foreign: id

schema.ymlに記述されていても、sfGuardUserへのリンクはありません。 代替テキスト 代替テキスト

4

3 に答える 3

2

これは機能します:

Author:
  connection: doctrine
  tableName: ec_author
  actAs:
    Sluggable:
      fields: [name]
      unique: true
      canUpdate: false
  columns:
    sf_guard_user_id:
      type: integer
      fixed: false
      unsigned: false
      primary: false
      autoincrement: false
    name:
      type: string(30)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    contents:
      type: string()
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
  relations:
      User:
        class: sfGuardUser
        foreignType: one
        local: sf_guard_user_id
        foreign: id
        foreignAlias: author

sf_guard_user_idは外部キーであるため、主キーにすることはできません。だから私はに変更 primary: trueしましたprimary: false

于 2010-09-21T15:16:47.090 に答える
1

クラス名は、スキーマファイルで対応するテーブルを開くときに指定した名前と同じである必要があります。

したがって、たとえば、次を使用しています。

relations:
    User:
      class: sfGuardUser
      foreignType: one

ここでのクラス名は、sfGuardUserテーブルの宣言と一致する必要があります。それらが同じであることを確認してください。場合によっては、sf_guard_userとして宣言できます。

それで問題ない場合は、Relationsエントリにさらにいくつかの定義を追加してみてください。

relations:
    User:
      class: sfGuardUser
      foreignType: one
      local: sf_guard_user_id
      foreign: sf_guard_user_id
于 2010-09-21T11:16:23.180 に答える
1

モデルとSQLも再構築する必要があります。実行してみてください:

symfony doctrine:build --all

これにより、既存のすべてのデータが破壊されます。それを望まない場合は、移行を作成する必要があります。

于 2010-09-14T21:44:34.867 に答える