类Project \ MyBundle \ PhpbbTopics没有名为forumId的关联

时间:2014-08-20 08:20:30

标签: php symfony doctrine-orm phpbb3

我试图在现场论坛上加入实体PhpbbTopics和PhpbbForums。这些是PhpBB表,因此在数据库级别上有外键。但是,当使用DQL连接两个实体时,我得到以下异常:

[Semantical Error] line 0, col 78 near 'f': Error: Class 
Project\MyBundle\Entity\PhpbbTopics has no association named forumId

我的Controller中正在执行的代码是:

$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
    'SELECT f.forumName
    FROM ProjectMyBundle:PhpbbTopics t JOIN t.forumId f'
);

这两个人是:

**
 * PhpbbTopics
 *
 * @ORM\Table(name="phpbb_topics", indexes={@ORM\Index(name="forum_id", columns={"forum_id"}), @ORM\Index(name="forum_id_type", columns={"forum_id", "topic_type"}), @ORM\Index(name="last_post_time", columns={"topic_last_post_time"}), @ORM\Index(name="topic_approved", columns={"topic_approved"}), @ORM\Index(name="forum_appr_last", columns={"forum_id", "topic_approved", "topic_last_post_id"}), @ORM\Index(name="fid_time_moved", columns={"forum_id", "topic_last_post_time", "topic_moved_id"})})
 * @ORM\Entity
 */
class PhpbbTopics
{
    /**
     * @var \Project\MyBundle\Entity\PhpbbForums
     *
     * @ORM\ManyToOne(targetEntity="Project\MyBundle\Entity\PhpbbForums")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="forum_id", referencedColumnName="forum_id")
     * })
     */
    private $forumId;
}

/**
 * PhpbbForums
 *
 * @ORM\Table(name="phpbb_forums", indexes={@ORM\Index(name="left_right_id", columns={"left_id", "right_id"}), @ORM\Index(name="forum_lastpost_id", columns={"forum_last_post_id"})})
 * @ORM\Entity
 */
class PhpbbForums
{
    /**
     * @var integer
     *
     * @ORM\Column(name="forum_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $forumId;

    /**
     * @var string
     *
     * @ORM\Column(name="forum_name", type="string", length=255, nullable=false)
     */
    private $forumName;
}

这两个实体都有比我所示更多的字段。我的查询中未使用这些字段。每个字段也有一个getter和setter,未显示。如果您觉得需要查看更多实体,请发表评论。

我尝试了以下解决方案,但它们没有解决我的问题:

修改

我发现PhpbbTopics.om.xml处的文件src\Project\MyBundle\Resources\config\doctrine未包含与PhpbbForums的关系。我已经更换了这条线:

<field name="forumId" type="integer" column="forum_id" nullable="false"/>

使用:

<many-to-one field="forumId" target-entity="PhpbbForums">
   <join-columns>
     <join-column name="forum_id" referenced-column-name="forum_id"/>
   </join-columns>
</many-to-one>

这并未解决或改变问题。

1 个答案:

答案 0 :(得分:0)

我通过更改连接的语法解决了我的问题。我现在使用的语法现在明确说明哪些实体应该连接在一起的字段。新查询是:

$query = $em->createQuery(
    'SELECT f.forumName
    FROM ProjectMyBundle:PhpbbTopics t JOIN ProjectMyBundle:PhpbbForums f WITH f.forumId = t.forumId'
); 

通过使用此查询,我可以删除我在PhpbbTopics.phpPhpbbTopics.om.xml中定义的ManyToOne关系。没有声明的关系,我的实体与我的数据库表更接近,因为表phpbb_topics没有phpbb_forums的外键。