私は数週間 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 に変更すると、はるかにうまく機能します。予想よりも多くのクエリが実行されますが、返されたオブジェクトには正しいデータが取り込まれています。