Php 使用“在Symfony2中查找查询”;使用「;

Php 使用“在Symfony2中查找查询”;使用「;,php,symfony,propel,Php,Symfony,Propel,我正试图通过此查询从数据库中获取一些信息: $broadcastsQuery = BroadcastQuery::create() ->limit(20); ->useBroadcastPartQuery(null, \Criteria::INNER_JOIN) ->useTopRelatedByIdTopBeginQuery(null, \Criteria::INNER_JOIN) ->en

我正试图通过此查询从数据库中获取一些信息:

$broadcastsQuery = BroadcastQuery::create()
        ->limit(20);
        ->useBroadcastPartQuery(null, \Criteria::INNER_JOIN)
            ->useTopRelatedByIdTopBeginQuery(null, \Criteria::INNER_JOIN)
            ->endUse()
            ->useTopRelatedByIdTopEndQuery(null, \Criteria::RIGHT_JOIN)
            ->endUse()
        ->endUse()
        ->filterBySended(true)
        ->find();
下面是我的schema.xml文件的一部分以及相关的表:

<table name="broadcast">
    <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
    <column name="id_channel" type="integer" />
    <column name="id_media" type="integer" />
    <column name="start_at" type="timestamp" />
    <column name="title" type="varchar" size="255" />
    <column name="sended" type="boolean" />
    <unique name="broadcast_id_plurimedia">
        <unique-column name="id_plurimedia" />
    </unique>
    <foreign-key foreignTable="channel">
        <reference local="id_channel" foreign="id" />
    </foreign-key>
</table>
<table name="broadcast_part">
    <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
    <column name="id_broadcast" type="integer" />
    <column name="id_top_begin" type="integer" />
    <column name="id_top_end" type="integer" />
    <foreign-key foreignTable="broadcast">
        <reference local="id_broadcast" foreign="id" />
    </foreign-key>
    <foreign-key foreignTable="top">
        <reference local="id_top_begin" foreign="id" />
    </foreign-key>
    <foreign-key foreignTable="top">
        <reference local="id_top_end" foreign="id" />
    </foreign-key>
</table>
<table name="top">
    <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
    <column name="id_channel" type="integer" />
    <column name="genre" type="varchar" size="20" />
    <column name="source" type="varchar" size="20" />
    <column name="real_date" type="timestamp" />
    <column name="frame" type="tinyint" />
    <column name="title" type="varchar" size="255" />
    <column name="orphan" type="boolean" />
    <column name="type" type="varchar" size="10" />
    <foreign-key foreignTable="channel">
        <reference local="id_channel" foreign="id" />
    </foreign-key>
</table>
我知道我可以在第二次使用“top”表(useTopRelatedByIdTopEndQuery)时使用别名,但我找不到方法

我还遇到了另一个问题,当我尝试仅使用一次来验证是否正确地从数据库检索数据时,我的广播对象中没有任何BroadcastPart

以下是我收藏中的一段广播:

[0] => Broadcast Object
            (
                [startCopy:protected] => 
                [id:protected] => 1
                [id_channel:protected] => 328
                [start_at:protected] => 2013-09-05 09:31:00
                [title:protected] => Killo Design
                [sended:protected] => 1
                [aChannel:protected] => 
                [collBroadcastParts:protected] => 
                [collBroadcastPartsPartial:protected] => 
                [alreadyInSave:protected] => 
                [alreadyInValidation:protected] => 
                [alreadyInClearAllReferencesDeep:protected] => 
                [broadcastPartsScheduledForDeletion:protected] => 
                [validationFailures:protected] => Array
                    (
                    )

                [_new:protected] => 
                [_deleted:protected] => 
                [modifiedColumns:protected] => Array
                    (
                    )

                [virtualColumns:protected] => Array
                    (
                    )

            )

查询的别名实际上由传递给它的参数表示
null

请尝试以下代码

$broadcastsQuery = BroadcastQuery::create('a')
    ->limit(20);
    ->useBroadcastPartQuery('b', \Criteria::INNER_JOIN)
        ->useTopRelatedByIdTopBeginQuery(null, \Criteria::INNER_JOIN)
        ->endUse()
        ->useTopRelatedByIdTopEndQuery('c', \Criteria::RIGHT_JOIN)
        ->endUse()
    ->endUse()
    ->filterBySended(true)
    ->find();

查询的别名实际上由传递给它的参数表示
null

请尝试以下代码

$broadcastsQuery = BroadcastQuery::create('a')
    ->limit(20);
    ->useBroadcastPartQuery('b', \Criteria::INNER_JOIN)
        ->useTopRelatedByIdTopBeginQuery(null, \Criteria::INNER_JOIN)
        ->endUse()
        ->useTopRelatedByIdTopEndQuery('c', \Criteria::RIGHT_JOIN)
        ->endUse()
    ->endUse()
    ->filterBySended(true)
    ->find();

我仍然有一个问题,因为在我的收藏中我仍然没有任何部分。转储仍然与第一个相同one@Genesor它被称为“延迟加载”。如果你想得到你的日期,你必须调用“get”方法。或者您可以使用
->joinWith…()
-它还可以使用first requestOk获取所有需要的数据感谢您的解释,但由于限制(),我不能使用“joinWith”。我仍然有一个问题,因为我的集合中仍然没有任何广播部分。转储仍然与第一个相同one@Genesor它被称为“延迟加载”。如果你想得到你的日期,你必须调用“get”方法。或者您可以使用
->joinWith…()
-它还可以通过第一个请求获取所有需要的数据OK感谢您的解释,但由于限制(),我不能使用“joinWith”。