Doctrine Orm - 搜索嵌入式关联
Doctrine Orm - Searching embedded associations
我有一个使用嵌入式关联的资产实体:
/**
* @ORM\Entity
*/
class Asset
{
....
/**
* @ORM\Embedded(class="Money\Money")
*/
private $code;
我想搜索这个 class,我的第一直觉是做这样的事情:
public function findOneByCurrencyCode(string $currencyCode)
{
$qb = $this->assetRepository->createQueryBuilder('asset');
$qb->innerJoin('asset.code', 'code')
->where('code.currency = :currency')
->setParameter('currency', $currencyCode);
$result = $qb->getQuery()->getOneOrNullResult();
return $result;
}
但是,returns 以下内容:
[Semantical Error] line 0, col 65 near 'code WHERE code.currency': Error:
Class Domain\Asset\Asset has no association named code
如何搜索嵌入式 classes?
编辑:
我可以通过这样做得到一个结果,但是,我觉得这是一个 hack:
$query = "SELECT * from asset where code_currency='BTC';";
$statement = $this->objectManager->getConnection()->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
return $result;
我尝试了很多不同的东西并设法得到了答案:
$qb = $this->assetRepository->createQueryBuilder('asset');
$qb->where('asset.code.currency = :currency')
->setParameter('currency', $currencyCode);
$result = $qb->getQuery()->getOneOrNullResult();
return $result;
事实证明不需要内部联接。不知道为什么,也许有人可以及时回答这个问题,但是上面的内容似乎适用于嵌入式对象
希望这对其他人有帮助。
“嵌入式关联”不存在。所以,你不需要 JOINS.
嵌入式是您实体的一部分以及其他属性。
你必须这样做:
SELECT u
FROM User u
WHERE u.address.city
(在此查询中,您的实体是 User,您的嵌入是 Address 和 *city 是你的 属性
嵌入式)。
在 Doctrine 文档中解释得很好:
Doctrine embeddables
我有一个使用嵌入式关联的资产实体:
/**
* @ORM\Entity
*/
class Asset
{
....
/**
* @ORM\Embedded(class="Money\Money")
*/
private $code;
我想搜索这个 class,我的第一直觉是做这样的事情:
public function findOneByCurrencyCode(string $currencyCode)
{
$qb = $this->assetRepository->createQueryBuilder('asset');
$qb->innerJoin('asset.code', 'code')
->where('code.currency = :currency')
->setParameter('currency', $currencyCode);
$result = $qb->getQuery()->getOneOrNullResult();
return $result;
}
但是,returns 以下内容:
[Semantical Error] line 0, col 65 near 'code WHERE code.currency': Error:
Class Domain\Asset\Asset has no association named code
如何搜索嵌入式 classes?
编辑:
我可以通过这样做得到一个结果,但是,我觉得这是一个 hack:
$query = "SELECT * from asset where code_currency='BTC';";
$statement = $this->objectManager->getConnection()->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
return $result;
我尝试了很多不同的东西并设法得到了答案:
$qb = $this->assetRepository->createQueryBuilder('asset');
$qb->where('asset.code.currency = :currency')
->setParameter('currency', $currencyCode);
$result = $qb->getQuery()->getOneOrNullResult();
return $result;
事实证明不需要内部联接。不知道为什么,也许有人可以及时回答这个问题,但是上面的内容似乎适用于嵌入式对象
希望这对其他人有帮助。
“嵌入式关联”不存在。所以,你不需要 JOINS.
嵌入式是您实体的一部分以及其他属性。
你必须这样做:
SELECT u
FROM User u
WHERE u.address.city
(在此查询中,您的实体是 User,您的嵌入是 Address 和 *city 是你的 属性 嵌入式)。
在 Doctrine 文档中解释得很好: Doctrine embeddables