2017-03-27 6 views
0

Ich versuche, drei Eigenschaften von allen untergeordneten Objekten zu erhalten, die zum übergeordneten Objekt in Sonata Admin gehören.Die untergeordneten Objekte von einem Objekt abrufen und neue Objekte erstellen, die noch nicht existieren

Ich habe mein Elternobjekt;

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

Dann möchte ich so alle untergeordneten Objekte aus dem übergeordneten Objekt erhalten;

$children = $parent->getChildObjects;

Wie erstelle ich dann ein Array von drei Eigenschaften (alle drei Eigenschaften sind ganze Zahlen) von allen Kindern zusammen Objekte?

Zum Beispiel;

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' 
} 

Weil das, was ich tun möchte, ist, ich möchte mehr Kinder schaffen Objekte, aber es hat in diesem Array zu überprüfen, ob das Kind noch nicht in Kombination der drei propeties existieren. Wenn es existiert, sollte es diese Nummer überspringen und den nächsten in der Schleife versuchen.

Wie kann ich das erreichen? Ich bin ziemlich neu in der Programmierung, und ich habe nur ein bisschen Symfonie und Sonatenwissen.

Wenn jemand andere Ideen mit anderen Arten von Array (multidimensional) zum Beispiel hat, stehe ich offen für verschiedene Ideen.

Antwort

0

Hier ist eine Möglichkeit, ein Array mit den drei Eigenschaften zu bauen:

$children = []; 

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

Dann können Sie ein Repository-Methode wie diese verwenden, um Ihre Abfrage zu machen:

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'

Verwandte Themen