2017-03-27 45 views
0

我试图从属于Sonata Admin中的父对象的所有子对象中获取三个属性。从对象获取子对象并创建一个还不存在的新对象

我有我的父母对象;

$parent = $this->admin->getSubject();

然后,我想从这样的父对象的所有子对象;

$children = $parent->getChildObjects;

我如何再从所有的孩子创建三个属性(所有三个属性是整数)的一个对象数组在一起吗?

例如;

array(3) { 
    [0]=> '1-1-1' 
    [1]=> '1-1-2' 
    [2]=> '1-1-3' 
    [3]=> '1-2-1' 
    [4]=> '1-2-2' 
    [5]=> '1-2-3' 
    [6]=> '1-3-1' 
    [7]=> '1-3-2' 
    [8]=> '1-3-3' 
    [9]=> '2-1-1' 
    [10]=> '2-1-2' 
    [11]=> '2-1-3' 
    [12]=> '2-2-1' 
    [13]=> '2-2-2' 
    [14]=> '2-2-3' 
    [15]=> '2-3-1' 
    [16]=> '2-3-2' 
    [17]=> '2-3-3' 
    [18]=> '3-1-1' 
    [19]=> '3-1-2' 
    [20]=> '3-1-3' 
    [21]=> '3-2-1' 
    [22]=> '3-2-2' 
    [23]=> '3-2-3' 
    [24]=> '3-3-1' 
    [25]=> '3-3-2' 
    [26]=> '3-3-3' 
} 

因为我想要做的是,我要创造更多的子对象,但它有一个数组中,检查如果发现孩子还没有在三个化子性质的组合的形式存在。如果它确实存在,它应该跳过该数字并尝试循环中的下一个数字。

我该如何做到这一点?我在编程方面相当新,而且我只有一点symfony和奏鸣曲知识。

如果任何人有其他类型的数组(例如多维)的其他想法,我站在不同的想法。

回答

0

这里是构建具有三个属性的数组的一种方式:

$children = []; 

foreach($parent->getChildren() as $child){ 
    $children[] = [ 
     'property1' => $child->getProp1(), 
     'property2' => $child->getProp2(), 
     'property3' => $child->getProp3() 
    ]; 
} 

然后你就可以使用存储库的方法是这样一个让你的查询:

public function findByNot(array $criteria, array $orderBy = null, $limit = null, $offset = null) 
    { 
     $qb = $this->getEntityManager()->createQueryBuilder(); 
     $expr = $this->getEntityManager()->getExpressionBuilder(); 

     $qb->select('entity') 
      ->from($this->getEntityName(), 'entity'); 

     foreach ($criteria as $field => $value) { 

      $qb->andWhere($expr->neq('entity.' . $field, $value)); 
     } 

     if ($orderBy) { 

      foreach ($orderBy as $field => $order) { 

       $qb->addOrderBy('entity.' . $field, $order); 
      } 
     } 

     if ($limit) 
      $qb->setMaxResults($limit); 

     if ($offset) 
      $qb->setFirstResult($offset); 

     return $qb->getQuery() 
      ->getResult(); 
    } 

Doctrine findBy 'does not equal'

相关问题