鉴于已经存在的类别对象。如果只知道了cateories的id,那么如何在新对象中重用一对多关系中的现有类别
/** @Entity() */
class Category {
/**
* @var string
* @\Doctrine\ORM\Mapping\Column(type="string")
*/
private $name;
/** @var string
* @\Doctrine\ORM\Mapping\Id()
* @\Doctrine\ORM\Mapping\Column(type="string")
*/
private $id;
/**
* Category constructor.
* @param string $name
* @param string $id
*/
public function __construct($name, $id)
{
$this->name = $name;
$this->id = $id;
}
/**
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @return string
*/
public function getId()
{
return $this->id;
}
}
现在我可以说两个类别id = 1 - >小说和id = 2 - >英语书。 现在我知道了类别的ID,并希望在Book对象中保存一对多关系。
/** @Entity() */
class Book {
/** @var mixed
* @\Doctrine\ORM\Mapping\OneToMany()
*/
private $categories;
/** @var string */
private $title;
/**
* Book constructor.
* @param mixed $categories
* @param string $title
*/
public function __construct($categories, $title)
{
$this->categories = $categories;
$this->title = $title;
}
/**
* @return mixed
*/
public function getCategories()
{
return $this->categories;
}
/**
* @return string
*/
public function getTitle()
{
return $this->title;
}
}
是否可以手动创建和持久化书籍对象,并引用现有且已经持久化的对象,我只知道该ID?
答案 0 :(得分:2)
如果不至少检索Reference
代理,则无法实现此目的:
$categoriesRefs = ['english' => 1, 'fiction' => 2];
$categories = [];
foreach($categoriesRefs as $ref){
$categories[] = $em->getReference('Namespace\Entity\Category', $ref));
}
$book = new Book($categories, 'title');
$em->persist($book);
$em->flush();
您可以在不提取整个类别对象的情况下存储类别 详细了解reference proxy。