【发布时间】:2014-01-29 14:59:55
【问题描述】:
我有一个实体帐户,这是一个有孩子和父母的经典实体。我这样做的方式是,SQL 关系仅与父母一起识别。
我想要的是为每个对象提供其子对象的列表。
在普通的旧 PHP 中,我将简单地循环一个 mysql_fetch_array 以获取我的所有帐户,并为每个请求再次向 parent = id 的 DB 请求,并将其放入我的帐户对象的属性 children(数组)中。
在 Symfony2/doctrine 中,我似乎无法做到这一点,至少不是那么简单。
那我该怎么办?
编辑: 在我的控制器中,这是我想做的:
$COA = $this->getDoctrine()->getRepository('NRtworksChartOfAccountsBundle:Account')->findAll();
foreach($COA as $one_account)
{
echo $one_account.getChildren();
}
但这不起作用。当我将此 $COA 传递给我的树枝时,我可以循环它,但不能在 PHP 中循环。
<?php
namespace NRtworks\ChartOfAccountsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
* @ORM\Table(name="Account")
*/
class Account
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=100, unique = true)
*/
protected $name;
/**
* @ORM\Column(type="string", length=50)
*/
protected $code;
/**
* @ORM\OneToMany(targetEntity="Account", mappedBy="parent")
*/
private $children;
/**
* @ORM\ManyToOne(targetEntity="Account", inversedBy="children")
*/
private $parent;
public function __construct()
{
$this->children = new ArrayCollection();
}
//getter & setter
?>
【问题讨论】:
-
您是否尝试过遍历
Accounts?在每个Account上调用getChildren()应该会给您孩子(如果关联映射正确;如果不正确,工具栏将显示错误)。在存储库、控制器或 Twig 模板中的上下文是什么? -
很高兴知道这一点。看看我的编辑,我的问题是我不知道如何循环访问我的帐户
-
$one_account.getChildren()应该是$one_account->getChildren()。