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