1

Places.yml

manyToOne:
  excursions:
    targetEntity: Excursions
    inversedBy: places
    inverse: true
    cascade: ["ALL"]
    nullable: false
    joinColumn:
      name: idx
      referencedColumnName: place_id

Excursions.yml

oneToOne:
  places:
    targetEntity: Places
    mappedBy: excursions

エクスカーションには1つのplace_idがあります。したがって、$exccursion->getPlaces()1行のみを返します。

さて、Placesテーブルに値を挿入しようとすると、Doctrine2は言いますNot null violation: 7 ERROR: null value in column "idx" violates not-null constraint

なぜこれが起こっているのか分かりません。削除してmanyToOneから挿入すると機能します。しかし、今回getPlaces()は機能していません。

アップデート

問題は、データベースに対してmappedByを使用することです。私はこれだけをすべきです:

Places.yml

manyToOne:
  --remove--

Excursions.yml

oneToOne:
  places:
    targetEntity: Places
    joinColumn:
        name: place_id
        referencedColumnName: idx

これで問題は解決します。しかし、私はランダムに試して/プレイすることでこれを見つけました。だから、私は理由がわかりません:)誰もが私を喜ばexplainせることを知っています。

4

1 に答える 1

3

まず第一に、マッピングが正しくありません。のようManyToOneにinPlaces.ymlとinversedsideをマッピングしないOneToOneExcursions.ymlください。これが、これらのエラーに遭遇した理由である可能性が最も高いです。また、 1つのオブジェクトをリンクさ
せたいのですが、質問を正しく理解していれば、さらに多くのオブジェクトを含めることができます。したがって、マッピングは次のようになります。ExcursionPlacesPlacesExcursions

# Places.yml
OneToMany:
    excursions:
        tagertEntity: Excursions
        mappedBy: places

# Excursions.yml
ManyToOne:
    places:
        targetEntity: Places
        inversedBy: excursions
        joinColumn:
            name: places_id
            referencedColumnName: id

ご了承ください:

  1. ManyToOne関係は、他の1つだけを持つエンティティの内部にある必要があります
  2. 関係は、他のOneToMany複数のオブジェクトを持つエンティティ内にある必要があります
  3. joinColumn: name:データベースに作成する列の名前を指定する必要があります
  4. joinColumn: referencedColumnName:関係をマップするために使用するターゲットエンティティのフィールドが必要です(idは一意であるため使用することをお勧めします)

このマッピングを作成したら、次のコマンドを実行します。

php app/console doctrine:generate:entities BUNDLE_PREFIX

バンドルBUNDLE_PREFIX名の最初の部分になります。これにより、すべての正しいゲッターとセッターが生成されます。データベーススキーマも更新することを忘れないでください。

php app/console doctrine:schema:update --force

最後のアドバイスとして、(このようにすることを意図した場合を除いて)エンティティ名をに変更することをお勧めします。ExcursionPlaceオブジェクトは1つの場所またはエクスカーションのみを保持する必要があります。

于 2012-11-11T13:24:27.927 に答える