有没有一种方法可以在不引用 Doctrine 中的实体对象或存储库的情况下指定外键的值
Is there a way to specify the value of a foreign key without any reference to the entity object or repositories in Doctrine
我有 2 个实体。
零件和库存
class Part
{
/**
* @ORM\Id
* @ORM\Column(type="string")
*/
private $partNumber;
/** @ORM\Column(name="part_name", type="string") */
private $partName;
/** @ORM\Column(type="string") */
private $warehouseStatus;
....
Inventory.php
class Inventory
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* One Product has One Shipment.
* @ORM\OneToOne(targetEntity="Part")
* @ORM\JoinColumn(name="part_number", referencedColumnName="part_number")
*/
private $partNumber;
/** @ORM\Column(type="decimal") */
private $inStock;
我是这样创建Part的
class one {
private function method1 {
$part = new Part();
$part->partNumber = 'blabla';
$part->warehouseStatus = 1;
.....
}
class two {
private function method1 {
$inv = new Inventory();
$inv->partNumber = 'blabla'; // it crashes here
$inv->inStock = 1;
.....
}
}
在 class 二中,我试图与第一个对象建立关系,但 partNumber 崩溃了,因为他期望实体对象作为部分而不是字符串。是否有一种集成的学说方法可以创建对零件实体的引用,而无需实例化存储库等。
为此,您需要使用 EntityManager
中的 getReference 函数:
/**
* Gets a reference to the entity identified by the given type and identifier
* without actually loading it, if the entity is not yet loaded.
*
* @param string $entityName The name of the entity type.
* @param mixed $id The entity identifier.
*
* @return object|null The entity reference.
*
* @throws ORMException
*/
public function getReference($entityName, $id);
你的情况:
$inv->partNumber = $entityManager->getReference(Part::class, $thePartIdYouReference);
我有 2 个实体。 零件和库存
class Part
{
/**
* @ORM\Id
* @ORM\Column(type="string")
*/
private $partNumber;
/** @ORM\Column(name="part_name", type="string") */
private $partName;
/** @ORM\Column(type="string") */
private $warehouseStatus;
....
Inventory.php
class Inventory
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* One Product has One Shipment.
* @ORM\OneToOne(targetEntity="Part")
* @ORM\JoinColumn(name="part_number", referencedColumnName="part_number")
*/
private $partNumber;
/** @ORM\Column(type="decimal") */
private $inStock;
我是这样创建Part的
class one {
private function method1 {
$part = new Part();
$part->partNumber = 'blabla';
$part->warehouseStatus = 1;
.....
}
class two {
private function method1 {
$inv = new Inventory();
$inv->partNumber = 'blabla'; // it crashes here
$inv->inStock = 1;
.....
}
}
在 class 二中,我试图与第一个对象建立关系,但 partNumber 崩溃了,因为他期望实体对象作为部分而不是字符串。是否有一种集成的学说方法可以创建对零件实体的引用,而无需实例化存储库等。
为此,您需要使用 EntityManager
中的 getReference 函数:
/**
* Gets a reference to the entity identified by the given type and identifier
* without actually loading it, if the entity is not yet loaded.
*
* @param string $entityName The name of the entity type.
* @param mixed $id The entity identifier.
*
* @return object|null The entity reference.
*
* @throws ORMException
*/
public function getReference($entityName, $id);
你的情况:
$inv->partNumber = $entityManager->getReference(Part::class, $thePartIdYouReference);