0

なぜ機能しないのか理解できないという単純な問題があります...サーバー:最新のZendServer CE、ZF:1.11.11、Doctrine:1.2.2

YAML スキーマ:

        ウジトコウニク:
          テーブル名: uzytkownicy
          列:
            ID:
              タイプ: 整数
              修正済み: false
          署名なし: 真
          プライマリ: 真
          自動インクリメント: true
        uzytkownik_dane_id:
          タイプ: 整数
        ログインする:
          タイプ: 文字列(64)
          notnull: 真
        ハスロー:
          タイプ: 文字列(96)
          notnull: 真
        Eメール:
          タイプ: 文字列(192)
          notnull: 真
        ナズワ:
          タイプ: 文字列(64)
      関係:
        UzytkownikDane:
          ローカル: uzytkownik_dane_id
          外部: id
          外国人エイリアス: Dane
          外部タイプ: 1

    UzytkownikDane:
      テーブル名: uzytkownicy_dane
      列:
        ID:
          タイプ: 整数
          修正済み: false
          署名なし: 真
          プライマリ: 真
          自動インクリメント: true
        みえ:
          タイプ: 文字列(128)
        ナズウィスコ:
          タイプ: 文字列(128)
        クラージュ:
          タイプ: 文字列(32)
        wojewodztwo:
          タイプ: 文字列(64)
        miejscowosc:
          タイプ: 文字列(128)
        アドレス:
          タイプ: 文字列(128)
        コード:
          タイプ: 文字列(16)
        電話:
          タイプ: 文字列(16)
      関係:
        ウジトコウニク:
          ローカル: ID
          外部: uzytkownik_dane_id

Doctrine Cli build-all-reload で生成されたモデル:

    hasOne('Application_Model_UzytkownikDane as UzytkownikDane', array(
                 'ローカル' => 'uzytkownik_dane_id',
                 '外国人' => 'id'));
        }
    }

ご覧のとおり、doctrine Cli は私のエイリアスを無視し、デフォルトを設定しました: Application_Model_UzytkownikDane を UzytkownikDane として... なぜ? 2番目のことは、(私が知らないことが重要かもしれません...) ymlファイルからすべてのモデルをビルドすると、Doctrine Cliがエラーを出力します:

    build-all-reload - データベースをドロップしてもよろしいですか? (はい/いいえ)
    y
    build-all-reload - 「doctrine」という名前の接続のデータベースを正常に削除しました

    build-all-reload - YAML スキーマから正常に生成されたモデル
    build-all-reload - 「doctrine」という名前の接続用のデータベースが正常に作成されました

    SQLSTATE[HY000]: 一般エラー: 1005 テーブル 'testdb.#sql-188_3a' を作成できません (e
    rrno: 150)。失敗したクエリ: "ALTER TABLE uzytkownik ADD CONSTRAINT uzytkownik_uzy
    tkownik_dane_id_uzytkownik_dane_id 外部キー (uzytkownik_dane_id) 参照 u
    zytkownik_dane(id)". クエリの失敗: ALTER TABLE uzytkownik ADD CONSTRAINT uzytko
    wnik_uzytkownik_dane_id_uzytkownik_dane_id 外部キー (uzytkownik_dane_id) REFE
    RENCES uzytkownik_dane(id)

なぜ?ofc すべての作業関係が機能しているなど..しかし、エイリアスが機能せず、Cli がエラーを出力します... よろしく

4

1 に答える 1

0

設定が尊重されていない理由がわからないので、foreignAlias家に帰ったらコードを確認します。

alter tableしかし、失敗した応答が返される理由は次のとおりだと思います。

Uzytkownik:
  ....
  uzytkownik_dane_id:
    type: integer
    # This is missing the unsigned attribute, as set in `UzytkownikDane.columns.id`
    # Also it may not hurt to add the fixed attribute as well, although I don't think it will matter

MySQL は両方の列のデータ型が同じであることを想定しているため、一方に符号なしのフラグが付けられ、もう一方に署名付きのフラグが付けられている場合、投稿した SQL エラーが発生します。

- アップデート -

Doctrine 1.2 docsによると:

リレーションシップを指定する場合は、外部キーが存在する側のリレーションシップのみを指定する必要があります。スキーマ ファイルが解析されると、関係が反映され、反対側が自動的に構築されます。関係の反対側を手動で指定すると、自動生成は無効になります。

私は彼らのガイドラインに従い、外部キーを含むテーブルでのみ関係を確立するので、これを試してみてください:

Uzytkownik:
  tableName: uzytkownicy
    columns:
      id:
        type: integer
        fixed: false
        unsigned: true
        primary: true
        autoincrement: true
      uzytkownik_dane_id:
        type: integer
      login:
        type: string(64)
        notnull: true
      haslo:
        type: string(96)
        notnull: true
      email:
        type: string(192)
        notnull: true
      nazwa:
        type: string(64)
      relations:
        UzytkownikDane:
          local: uzytkownik_dane_id
          foreign: id
          foreignAlias: Dane # Set this if you want the UzytkownikDane to reference this as Dane
          alias: Dane # Set this if you want this table to reference UzytkownikDane as Dane (which I think is what you want)
          foreignType: one

UzytkownikDane:
  tableName: uzytkownicy_dane
  columns:
    id:
      type: integer
      fixed: false
      unsigned: true
      primary: true
      autoincrement: true
    imie:
      type: string(128)
    nazwisko:
      type: string(128)
    kraj:
      type: string(32)
    wojewodztwo:
      type: string(64)
    miejscowosc:
      type: string(128)
    adres:
      type: string(128)
    kod:
      type: string(16)
    telefon:
      type: string(16)    
  # No need for references here, they will be auto-generated by Doctrine

私はビルドモデルをテストし、Doctrine のドキュメントが指示したとおりに動作しました。

于 2012-05-09T21:34:27.053 に答える