从对象获取子对象并创建尚不存在的新对象

时间:2017-03-27 13:04:39

标签: php

我试图从属于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和sonata知识。

如果有人对其他类型的数组(多维)有其他想法,我会对不同的想法持开放态度。

1 个答案:

答案 0 :(得分: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'