首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用"use“推进Symfony2中的查找查询

使用"use“推进Symfony2中的查找查询
EN

Stack Overflow用户
提问于 2013-09-05 23:50:10
回答 1查看 214关注 0票数 1

我正在尝试从我的数据库中获取以下查询的一些信息:

代码语言:javascript
复制
$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文件中包含相关表的部分:

代码语言:javascript
复制
<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>

当我试图执行这个查询时,我收到了以下错误消息:

代码语言:javascript
复制
...Syntax error or access violation: 1066 Not unique table/alias: "top"...

我知道我可以为"top“表(useTopRelatedByIdTopEndQuery)的第二次使用使用别名,但我找不到一种方法。

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

这里是我收藏的一个广播的垃圾堆:

代码语言:javascript
复制
[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
                    (
                    )

            )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-06 06:50:53

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

尝试以下代码

代码语言:javascript
复制
$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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18647732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档