找对象的孩子在数据库(find the children of an object in the d

2019-09-28 09:58发布

我有这是一个典型的实体孩子和家长一个实体帐户。 我做的方式,在SQL关系确定仅与家长。

我想是有每个对象的孩子的名单。

在普通的旧的PHP,我只想在mysql_fetch_array循环有我的所有账户,并为每个一个请求再次向DB,其中母公司= id,这样也放到了我的帐户对象的属性儿童(阵列)。

在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    

?>    

Answer 1:

答案

你可以简单地做:

$children = $account->getChildren();

然后遍历这些孩子让自己的孩子,等等,等等...

或者你可以使用DQL 。 将这个在定制库 :

public function findByParent(Account $account)
{
    $dql = 'SELECT a FROM Account a WHERE a.parent = :parentId';
    $q = $this->getEntityManager()->createQuery($dql);
    $q->setParameter('parentId', $account->getId());

    return $q->getResult();
}

然后(在例如控制器),你可以这样做:

$children = $em->getRepository('Account')->findByParent($parent);

然后遍历这些孩子让自己的孩子,等等,等等...

一些忠告

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

你应该看看树行为 l3pp4rd的学说扩展。 它采用了不同的设置,使用它可以只用1查询获取整个树。

PS:如果您使用的Symfony 2,你可以使用StofDoctrineExtensionsBundle整合这些原则扩展。

回答您的编辑

$one_account.getChildren()应该是$one_account->getChildren() 一个点( . )在PHP是用于连接字符串。



文章来源: find the children of an object in the database