0

私は QueryBuilder を使用して、州のある最大の 10 の都市を取得しています。

$query = $em->createQueryBuilder()
            ->select('c','s')
            ->from('CitiesBundle:Cities', 'c')
            ->innerJoin('c.state', 's','WITH', 'c.state = s')
            ->orderBy('c.population', 'DESC')
            ->setMaxResults(10)
            ->getQuery();

生成された SQL:

c0_.id を id0 として、c0_.name を name1 として、c0_.landarea を landarea2 として、c0_.density をdensity3 として、c0_.population を人口 4 として、s1_.id を id5 として、s1_.name を name6 として、c0_.state_id を state_id7 として選択します。 c0_ INNER JOIN states s1_ ON c0_.state_id = s1_.id AND (c0_.state_id = s1_.id) ORDER BY c0_.population DESC LIMIT 10

PHPMyAdminでそのクエリをテストすると、すべての都市に独自の州がありますが、アプリでは配列内のすべての都市が最初の都市の州と関連付けられています。

この場合、Doctrine2 の動作について説明してもらえますか?

[編集]

スキーマ:

XYZ\Bundle\CitiesBundle\Entity\Cities:
  type: entity
  table: cities
  fields:
  #fields
  oneToMany:
    state:
      targetEntity: States
      cascade: {  }
      mappedBy: null
      inversedBy: null
      joinColumns:
        state_id:
          referencedColumnName: id
      orphanRemoval: false
  lifecycleCallbacks: {  }


XYZ\Bundle\CitiesBundle\Entity\States:
  type: entity
  table: states
  fields:
    id:
      id: true
      type: boolean
      nullable: false
      generator:
        strategy: IDENTITY
    name:
      type: string
      length: 50
      fixed: false
      nullable: false
  lifecycleCallbacks: {  }

別のスキーマ オプション (ManyToOne など) を試しましたが、うまくいきませんでした

PHPMyAdmin からのスクリーンショット、mazowieckie などは状態の名前です。私のアプリでは、10 都市すべてに州名 -> 名前 mazowieckie があります。

ここに画像の説明を入力

アプリの外観からのスクリーンショット:

ここに画像の説明を入力

ループで州名を出力しています: {{ city.state.name }}

4

0 に答える 0