3

私は数週間 Symfony の問題に取り組んでいますが、どこにも行き着きません。

イベントとプレイリストは 1 対多の関係にあります。私の schema.yml ファイルの関連部分:

Event:
  actAs:
    Timestampable: ~
  columns:
    date:
      type: date(25)
      default: '0000-00-00'
      notnull: true
    name:
      type: string(60)
      notnull: true
    host_title_id:
      type: integer
    broadcast_format:
      type: enum(7)
      values:
        - Radio
        - Live
        - Podcast
        - Video
      default: Podcast
      notnull: true
    long_description:
      type: string()
      notnull: true
    geography_id:
      type: integer
      default: NULL
    has_been_emailed:
      type: boolean
      default: '0'
      notnull: true
    active:
      type: boolean
      default: '0'
      notnull: true

Playlist:
  actAs:
    Timestampable: ~
  columns:
    show_time: string(40)
    recorded:
      type: boolean
      default: '0'
      notnull: true
    title: string(100)
    event_id: integer
    podcast_id: integer
  relations:
    Event:
      local: event_id
      foreign: id
      foreignAlias: Playlists

次のコードは問題なく、データベースに対して 1 つのクエリを実行します。

return Doctrine_Query::create()
            ->from('Playlist P')
            ->leftJoin('P.Event E')
            ->limit(1)->execute();

次のコードは問題があり、データベースに対して 6 つのクエリが発生します。

return Doctrine_Query::create()
            ->from('Event E')
            ->leftJoin('E.Playlists P')
            ->limit(1)->execute();

さらに悪いことに、この 2 番目のステートメントでは、返されたオブジェクトの [Playlists] 部分にデータがありません。つまり、次のようになります。

sfOutputEscaperArrayDecorator Object
(
    [count:sfOutputEscaperArrayDecorator:private] => 1
    [value:protected] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [date] => 1998-08-01
                    [name] => Showname
                    [host_title_id] => 1
                    [broadcast_format] => Radio
                    [long_description] => This is an episode.
                    [geography_id] => 25
                    [has_been_emailed] => 1
                    [active] => 1
                    [created_at] => 0000-00-00 00:00:00
                    [updated_at] => 0000-00-00 00:00:00
                    [Playlists] => Array
                        (
                        )

                )

        )

    [escapingMethod:protected] => esc_specialchars
)

この 2 つの注文の違いは何ですか? 理解できない。

更新: スキーマと DQL で Playlists という名前の関係を TestPlaylists に変更すると、はるかにうまく機能します。予想よりも多くのクエリが実行されますが、返されたオブジェクトには正しいデータが取り込まれています。

4

1 に答える 1

1

使用している Symfony のバージョンは何ですか? Symfony 1.4.18 プロジェクトでスキーマをテストしたところ、Doctrine クエリから制限を取り除くと、どちらも DB へのクエリを 1 つだけ作成します。

そこに制限を保持すると、2 番目の Doctrine クエリが 1 つの追加の DB クエリを作成しました (つまり、イベントで個別に選択します)。

于 2013-01-27T22:06:28.080 に答える