我试图从属于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知识。
如果有人对其他类型的数组(多维)有其他想法,我会对不同的想法持开放态度。
答案 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();
}