Doctrine orm 自连接查询原则2 Zendframework 2
我使用的是条令2 ORM,Zendframework 2 角色实体中的实体属性如下所示Doctrine orm 自连接查询原则2 Zendframework 2,doctrine-orm,zend-framework2,Doctrine Orm,Zend Framework2,我使用的是条令2 ORM,Zendframework 2 角色实体中的实体属性如下所示 /** * * @ORM\Column(type="string") */ protected $name; /** * * @ORM\OneToMany(targetEntity="\Application\Entity\Role", mappedBy="parent") */ protected $children;
/**
*
* @ORM\Column(type="string")
*/
protected $name;
/**
*
* @ORM\OneToMany(targetEntity="\Application\Entity\Role", mappedBy="parent")
*/
protected $children;
/**
*
* @ORM\ManyToOne(targetEntity="\Application\Entity\Role", inversedBy="children")
*
*/
protected $parent;
Mysql表如下所示
我要寻找的结果是一个数组。
有一点很关键,数组中的任何条目在赋值之前都必须作为键添加,
所以秩序很重要
i、 e[site manager]=>如果[guest]=>在它之前不存在,则guest不能作为第一个条目(0索引)出现,因为guest(值)在数组中不作为键存在
所以[guest]=>将排在第一位,即使它作为表中的第二条记录输入
Array(
[guest] =>
[site-manager] => guest
[company-manager] => site-manager
[member] => guest
[staff] => member
[internalstaff] => member
[sales] => staff
[manager] => sales,internalstaff
[admin] => manager
)
我正在控制器中运行此代码,该控制器返回空数组
$qb = $objectManager->createQueryBuilder();
$qb->select('r, p')
->from('\Application\Entity\Role', 'r')
->innerJoin('r.parent','p', 'with','p.id = r.id')
//->where('b.id = ?1')
->orderBy('r.id', 'ASC');
$data = $qb->getQuery()->getArrayResult();
任何帮助都将不胜感激一个解决方案可能是
$qb = $objectManager->createQueryBuilder();
$qb->select('r.name', 'c.name as children')
->from('\Application\Entity\Role', 'r')
->join('r.parent','c');
$data = $qb->getQuery()->getArrayResult();
$refine = array();
foreach ($data as $v)
{
if(is_array($v))
{
if(array_key_exists($v["children"], $refine)){
$refine[$v["name"]][] = $v["children"];
} else {
$refine[$v["children"]] = array();
$refine[$v["name"]][] = $v["children"];
}
}
}
print_r($refine);
将在下面返回
Array
(
[guest] => Array
(
)
[site-manager] => Array
(
[0] => guest
)
[company-manager] => Array
(
[0] => site-manager
)
[member] => Array
(
[0] => guest
)
[staff] => Array
(
[0] => member
)
[internalStaff] => Array
(
[0] => member
)
[sales] => Array
(
[0] => staff
)
[manager] => Array
(
[0] => internalStaff
[1] => sales
)
[admin] => Array
(
[0] => manager
)
)
若要展平内部阵列,可以使用函数