1

yamlとデータフィクスチャでデータベースマークアップを作成する方法について詳しく知ることができます。

私はチュートリアルに従い、ユーザーと車の両方の関係の下で、次のような関係を作成します。私のqnは、Carで「type:many」である理由です。代わりにユーザーに含めることはできますか(興味があります)?

abtデータ型。データベースが異なれば、データベースのサポートも異なります。MySQL(ここで使用されているInnoDB)では、整数はtinyint(x)、bigint(x)、int(x)...または文字列は文字列ではなくvarcharであると思いましたか?ここで使用するものは厳密ではありませんか?

options:
  type: INNODB
  collate: utf8_general_ci
  charset: utf8

User:
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    name: string(300)
    email: string(300)
    phone: string(9)
    car_id: integer
  relations: 
    Car: 
      local: car_id
      foreign: id
Car:
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    brand: string(300)
  relations:
    Users:
      class: User
      foreign: car_id
      local: id
      type: many

更新1

  1. 私の例では、「外部キーが存在する側の関係を指定するだけでよい」ということになるのでしょうか。FKテーブル(車)またはFK列(ユーザー)を意味しますか?

  2. TEXTデータ型が表示されませんが、そのclob(Character Large OBject)ですか?–iceangel890秒前[このコメントを削除]

  3. ForeignAliasとは何ですか?エイリアスもありますか?

更新2

これは少し長くなります。DoctrineYAMLスキーマファイルのドキュメントページにあるコード例のいくつかを明確にしたいと思います。関係セクションに焦点を当てる->//コメント

User:
  columns:
    username:
      type: string(255)
    password:
      type: string(255)
    contact_id:
      type: integer
  relations:
    Contact:
      class: Contact // if the table is named Contact, class will be Contact also?
      local: contact_id 
      foreign: id
      foreignAlias: User // whats alias for? 
      foreignType: one // one contact ... to ...
      type: one // one user?

Contact:
  columns:
    first_name:
      type: string(255)
    last_name:
      type: string(255)
    phone:
      type: string(255)
    email:
      type: string(255)
    address:
      type: string(255)
  relations:
    User:
      class: User
      local: id
      foreign: contact_id
      foreignAlias: Contact
      foreignType: one
      type: one

多対多の例に関して、次はどういう意味ですか?

attributes:
  export: all
  validate: true

tableName: group_table

refClass: GroupUser
4

2 に答える 2

0

私はこれが古いことを知っていますが、これらは私が混乱していると感じたものであり、今でもそうしています。実際、私はすべての可能性に精通しているわけではありません。これは私にとってうまくいくことに基づいています。多対多の関係を探していると思いますが、私はそれらに対するDoctrineのサポートを完全に避け、代わりに独自の関連付けテーブルを明示的に定義しているため、1対多および1対1の関係のみを使用します。 。

UPDATE1に記載されているように、外部キーを持つ側の関係のみを指定します。

  1. この場合、Userには、 Carのid列を参照する外部キーであるcar_id列があります。したがって、ユーザー側では、関係はCarとの関係であり、キー値を含むローカル列は car_idであり、それが参照する他の(外部)テーブルの列はidです。
  2. Doctrineは独自のデータ型を定義し、それらを使用している特定のデータベースのデータ型に自動的にマップします。development7はドキュメントへのリンクを提供しました、またはあなたは教義の情報源を見ることができます。
  3. externalAliasは、外部側のリレーションに名前を付けます。外部キーを含む側のリレーションの名前は、リレーションの下のレベルで使用される名前で指定されるため、エイリアスはありません。これは、外部キーが参照するテーブルの名前として一般的に指定されます。

UPDATE 2について:

class:Contact Userのyamlは、Contactという名前のリレーションがあり、これはContactクラスを参照していると言っます。デフォルトでは、クラス名とテーブル名は同じです。yamlスキーマはクラス名のみを処理しますが、特定のクラスに別のテーブル名を使用するように指示することは可能です。

ForeignAlias:User連絡先からユーザーへの関係 の名前は「User」です。上で説明したように、「エイリアス」と呼ばれるものはありません。ユーザーから連絡先へのリレーションの名前は「連絡先」です。これは、この行が表示されるユーザーのリレーションのリストにある名前だからです。もちろん、同じ2つのクラス間に複数の関係がある場合、これらのデフォルトの関係の命名は崩壊します。クラス名とは異なる明示的なリレーション名を付ける機能が必要です。リレーションの名前は、DQL結合で使用するため、重要です。

外国タイプ:1つ の連絡先(外国側)には1人のユーザーがいます

タイプ:1 ユーザー(ローカル側)には1つの連絡先があります。

この例は、同じ関係の両側を明示的に示すという点で少し珍しいことに注意してください。通常は、外部キーを含む側(ユーザー側)にのみ表示します。ユーザーには連絡先を指す外部キーが含まれているため、「タイプ」は「1つ」のみにすることができます。ただし、foreignTypeは「many」である可能性があり、特定の連絡先が多くのユーザーによってポイントされる可能性があることを示します。ただし、この場合、特定の連絡先を参照できるのは1人のユーザーのみであると指定されています。

タイプを「多」と指定した場合、実際にはどうなるかわかりません。これを実装するには、多対多の関係のように追加の関連付けテーブルが必要になります。Doctrineが多対多の関係の場合のように「自動的に」そのようなテーブルを作成するかどうかはわかりません。Doctrineを使用するために、私は可能な限り理解できない命名規則に基づく暗黙の機構を避けます。そのため、「detect_relations」をオフにして、多対多の関係を避けます。

于 2012-06-03T06:33:41.860 に答える