Orm 如何使用findBy($creteria)进行双向OneToOne映射?

Orm 如何使用findBy($creteria)进行双向OneToOne映射?,orm,doctrine-orm,foreign-keys,one-to-one,bidirectional,Orm,Doctrine Orm,Foreign Keys,One To One,Bidirectional,有两个实体--资产和附件,双向映射OneToOne。每个资产可以有0..1资产: 资产 class Asset { /** * @var string @ORM\Column(name="asset_uuid", type="string", length=36, nullable=false) * @ORM\Id */ private $uuid; /** * @var \MyLib\Model\Entity\Attac

有两个实体--
资产
附件
,双向映射
OneToOne
。每个
资产
可以有
0..1
资产

资产

class Asset
{
    /**
     * @var string @ORM\Column(name="asset_uuid", type="string", length=36, nullable=false)
     *      @ORM\Id
     */
    private $uuid;
    /**
     * @var \MyLib\Model\Entity\Attachment
     * @ORM\OneToOne(targetEntity="MyLib\Model\Entity\Attachment", mappedBy="asset", cascade={"remove", "persist"}, orphanRemoval=true)
     **/
    private $attachment;
    ...
}
class Attachment
{
    /**
     * @var string @ORM\Column(name="attachment_uuid", type="string", length=36, nullable=false)
     *      @ORM\Id
     */
    private $uuid;
    /**
     * @var \MyLib\Model\Entity\Asset
     * @ORM\OneToOne(targetEntity="\MyLib\Model\Entity\Asset", inversedBy="attachment", cascade={"persist"})
     * @ORM\JoinColumn(name="attachment_linkassetuuid", referencedColumnName="asset_uuid")
     */
    private $asset;
    ...
}
附件

class Asset
{
    /**
     * @var string @ORM\Column(name="asset_uuid", type="string", length=36, nullable=false)
     *      @ORM\Id
     */
    private $uuid;
    /**
     * @var \MyLib\Model\Entity\Attachment
     * @ORM\OneToOne(targetEntity="MyLib\Model\Entity\Attachment", mappedBy="asset", cascade={"remove", "persist"}, orphanRemoval=true)
     **/
    private $attachment;
    ...
}
class Attachment
{
    /**
     * @var string @ORM\Column(name="attachment_uuid", type="string", length=36, nullable=false)
     *      @ORM\Id
     */
    private $uuid;
    /**
     * @var \MyLib\Model\Entity\Asset
     * @ORM\OneToOne(targetEntity="\MyLib\Model\Entity\Asset", inversedBy="attachment", cascade={"persist"})
     * @ORM\JoinColumn(name="attachment_linkassetuuid", referencedColumnName="asset_uuid")
     */
    private $asset;
    ...
}
现在我想通过
Asset.uuid
找到一个
附件

class AssetService ...
{
    ...
    private function finAttachmentByAssetUuid($assetUuid)
    {
        $entityManager = $this->getEntityManager();
        $attachmentRepository = $entityManager->getRepository('MyLib\Model\Entity\Attachment');

        $attachment = $attachmentRepository->findBy([
            'attachment_linkassetuuid' => $assetUuid
        ]);

        return $attachment;
    }
    ...
}
但它不起作用,也不能起作用,因为条令要求实体属性名,而不是表列名。但是在这里,实体没有外键列的属性


在这种情况下,如何使用(…)
查找的
原则\公共\持久性?或者,如果不可能,如何通过
资产检索
附件
。uuid
在这种具体情况下,另一种方式?

在原则中,重点是实体,而不是数据库结构。因此,如果您想要获取关联实体,您将不会通过外部ID获取它,而是通过关联实体。如果您不想执行查询来执行此操作,您可以获取对该实体的引用:

/** @var EntityManager $em */
$asset = $em->getReference('MyLib\Model\Entity\Asset', $assetId);
$attachement = $asset->getAttachment();
您可以阅读条令内部文件中的参考资料: