Doctrine2的问题加入了表格

时间:2012-02-02 14:49:26

标签: zend-framework doctrine-orm

我正在从Doctrine 1.2迁移到Doctrine 2.1,而且我遇到的问题应该是简单的连接

这是我的第一张表:

/**
 * Model_WBS
 *
 * @Table(name="WBS")
 * @Entity
 */
 class Model_Wbs 
   /**
    * @var integer $id
    *
    * @Column(name="id", type="integer", length=8)
    * @Id
    * @GeneratedValue(strategy="SEQUENCE")
    * @SequenceGenerator(sequenceName="wbs_seq_seq", allocationSize=1, initialValue=1)
    */
    public $id;
  .
  .
  .
   /**
    * @var \Doctrine\Common\Collections\ArrayCollection
    *
    * @OneToMany(targetEntity="Model_WbsFund", mappedBy="id")
    * @JoinColumn(name="id", referencedColumnName="wbs_id")
   */
   public $wbsfunds;

这是我的第二张表

/**
 * Model_WbsFund
 *
 * @Table(name="WBS_FUNDS")
 * @Entity
 */
class Model_WbsFund    
 /**
  * @var integer $id
  *
  * @Column(name="id", type="integer", length=8)
  * @Id
  * @GeneratedValue(strategy="SEQUENCE")
  * @SequenceGenerator(sequenceName="wbs_funds_seq_seq", allocationSize=1, initialValue=1)
  */
public $id;

/**
 * @var integer $wbs_id
 *
 * @Column(name="wbs_id", type="integer", length=8)
 */
public $wbs_id;
 .
 .
 .
  /**
   * @var \Doctrine\Common\Collections\ArrayCollection
   *
   * @ManyToOne(targetEntity="Model_Wbs", inversedBy="wbs_id")
   * @JoinColumn(name="wbs_id", referencedColumnName="id")
  */
  public $WBS;

这是我的简单测试

$testEntity = Model_Wbs::find(7185);
foreach($testEntity->getwbsfunds() as $wbsfundobj){
  print("<br/>");
  print($wbsfundobj->FUND->getFundCode()." -- ".$wbsfundobj->WBS->getWbs());
}

所以我希望看到wbsfunds表中的基金代码和wbs与我首次搜索的wbs相关联。 (我输入 - &gt; WBS-&gt; getWbs()来查看我是否实际上只获得了与wbs id 7185相关的资金)。

相反,我获得了所有wbs_funds记录。我打印出生成的查询语句原则并且它不正确

SELECT t0.id AS ID1, t0.wbs_id AS WBS_ID2, t0.fund_id AS FUND_ID3, t0.wbs_id AS WBS_ID4, t0.fund_id AS FUND_ID5 FROM WBS_FUNDS t0

有趣的是,wbsfundobj-&gt; FUND-&gt; geFundCode()之间的链接效果很好,wbsfundobj-&gt; WBS-&gt; getWBS()也是如此,但是从WBS到WBS_FUNDS的链接似乎是错误的。

1 个答案:

答案 0 :(得分:0)

通常,您在存储库上为实体调用find()。类似的东西:

// $em is your Entity Manager instance
$testEntity = $em->getRepository('\Model_Wbs')->find(7185);

// or a shorcut
$testEntity = $em->find('\Model_Wbs', 7185);

如何获得对EntityManager的引用取决于您如何引导Doctrine。如果您使用了Bisna application resource plugin,那么它就像(在控制器中):

$em = $this->getInvokeArg('bootstrap')->getResource('doctrine')->getEntityManager();

通常,我将它放入控制器的init()方法中,或编写一个封装上述步骤的动作助手,以便我可以使用以下内容调用它:

$em = $this->_helper->doctrine->getEntityManager();