Есть два объекта -- Asset
и Attachment
, сопоставленные в двух направлениях OneToOne
. Каждый Asset
может иметь 0..1
Asset
:
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;
...
}
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;
...
}
Теперь я хочу find()
и Attachment
от 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;
}
...
}
Но это не работает и не может работать, поскольку Doctrine ожидает имя атрибута сущности, а не имя столбца таблицы. Ну, но здесь у объекта нет атрибута для столбца внешнего ключа.
Как использовать Doctrine\Common\Persistence#findBy(...)
в этом случае? Или, если это невозможно: Как получить Attachment
по Asset.uuid
в этом конкретном случае другим способом?