DB中数据的示例结构:
configurator_element
:
id
:1,name
:小集合,inheritsFrom
:空,features
:[“功能1”,“功能2”] id
:2,name
:媒体集,inheritsFrom
:1,features
:[“功能3”] id
:3,name
:大集合,inheritsFrom
:2,features
:[“功能4”,“功能5”] 我想在ORM方面创建一种机制,该机制可以自动提取具有所有继承特征的Element
对象。
因此,我想通过ID App\Entity\Configurator\Element
来获取3
,从而自动获取如下实体:
id
:3 name
:大套features
:
当前,我是在控制器中使用以下命令完成的:
$features = [];
$inheritance = $element->getInheritsFrom();
while ($inheritance instanceof Element) {
$features = array_merge($features, $inheritance->getFeatures());
$inheritance = $inheritance->getInheritsFrom();
}
$features = array_merge($features, $element->getFeatures()->toArray());
$element->setFeatures($features);
我的实体类:
namespace App\Entity\Configurator;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="configurator_element")
* @ORM\Entity(repositoryClass="App\Repository\Configurator\ElementRepository")
*/
class Element
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var Element|null
*
* @ORM\ManyToOne(targetEntity="Element", fetch="EAGER")
* @ORM\JoinColumn(nullable=true)
*/
private $inheritsFrom;
/**
* @var Feature[]
*
* @ORM\OneToMany(targetEntity="Feature", mappedBy="element")
*/
private $features;
...
}
答案 0 :(得分:0)
功能是数组集合, 除了使用setFeatures,还可以使用addFeature,removeFeature。因此,您不需要合并数组,可以在while循环中添加功能。 另外,您可以在要素实体中添加继承
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Element")
* @ORM\JoinColumn(name="element_id", referencedColumnName="id")
*/
private $element;
在控制器中:
$features = $this->em->getRepository(App\Entity\Feature)->finAll();
foreach($features as $feature)
{
$elemet->addFeature($feature);
}
$this->em->flush();