Php 在数据库中查找对象的子对象

Php 在数据库中查找对象的子对象,php,symfony,doctrine,Php,Symfony,Doctrine,我有一个实体账户,这是一个典型的有孩子和父母的实体账户。按照我的方式,SQL关系只与父对象标识 我想要的是每个对象都有其子对象的列表 在普通的旧PHP中,我只需在mysql_fetch_数组上循环,就可以拥有我的所有帐户,对于每一个请求,我都会再次向DB where parent=id so发出请求,并将其放入我帐户对象的属性children(数组)中 在Symfony2/学说中,似乎我不能这样做,至少不能这么简单 那我该怎么办 编辑: 在我的控制器中,这是我想做的: $COA = $thi

我有一个实体账户,这是一个典型的有孩子和父母的实体账户。按照我的方式,SQL关系只与父对象标识

我想要的是每个对象都有其子对象的列表

在普通的旧PHP中,我只需在mysql_fetch_数组上循环,就可以拥有我的所有帐户,对于每一个请求,我都会再次向DB where parent=id so发出请求,并将其放入我帐户对象的属性children(数组)中

在Symfony2/学说中,似乎我不能这样做,至少不能这么简单

那我该怎么办

编辑: 在我的控制器中,这是我想做的:

  $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    

?>    

答案

您可以简单地执行以下操作:

$children = $account->getChildren();
然后把这些孩子绕过去让他们的孩子等等等等

或者你可以使用。把这个放在一个盒子里:

然后(例如在控制器中),您可以执行以下操作:

$children = $em->getRepository('Account')->findByParent($parent);
然后把这些孩子绕过去让他们的孩子等等等等

一些建议

这个过程不是很有效,尤其是当树变大时

您应该看看l3pp4rd的条令扩展。它使用一种不同的设置,您只需一个查询就可以获取整个树

PS:如果您正在使用Symfony 2,您可以使用来集成这些条令扩展

回答您的编辑问题


$one\u account.getChildren()
应该是
$one\u account->getChildren()
。php中的点(
)用于连接字符串。

您是否尝试在
帐户上循环?在每个
帐户上调用
getChildren()
应该会得到子项(如果关联映射正确,则工具栏将显示错误)。在存储库、控制器或细枝模板中,上下文是什么?谢谢,很高兴知道。看看我的编辑,我的问题是我不知道如何循环我的帐户
$one\u account.getChildren()
应该是
$one\u account->getChildren()
。嘿,谢谢你。我对我的问题进行了修改。我意识到还有一件事我不知道怎么做:)ps:我已经安装了StofOctrineExtensionBundle,我也在尝试。但事实是,我也需要自己尝试一些基本的东西,才能理解基本的东西。@jasper-n-brouwer嗨,很抱歉再次拜访你,但似乎没有人有这个答案。最后,我转向StofDoctrineExtension,它非常方便地获取树的孩子。但问题是我现在找不到父母:(
$children = $em->getRepository('Account')->findByParent($parent);