Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine orm Orm原则-搜索嵌入式关联_Doctrine Orm_Zend Framework3 - Fatal编程技术网

Doctrine orm Orm原则-搜索嵌入式关联

Doctrine orm Orm原则-搜索嵌入式关联,doctrine-orm,zend-framework3,Doctrine Orm,Zend Framework3,我有一个使用嵌入式关联的资产实体: /** * @ORM\Entity */ class Asset { .... /** * @ORM\Embedded(class="Money\Money") */ private $code; 我想搜索这门课,我的第一反应是这样做: public function findOneByCurrencyCode(string $currencyCode) { $qb = $this->assetRepo

我有一个使用嵌入式关联的资产实体:

/**
 * @ORM\Entity
 */
class Asset
{

....

    /**
     * @ORM\Embedded(class="Money\Money")
     */
   private $code;
我想搜索这门课,我的第一反应是这样做:

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;
}
但是,这将返回以下内容:

[Semantical Error] line 0, col 65 near 'code WHERE code.currency': Error: 
Class Domain\Asset\Asset has no association named code
如何搜索嵌入类

编辑:

我可以通过这样做得到一个结果,但是,我觉得这是一个黑客:

    $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;
结果表明,不需要内部联接。不知道为什么,也许有人能及时回答这个问题,但是上面的内容似乎适用于嵌入式对象


希望这对其他人有帮助。

我尝试了许多不同的方法,并设法得到了答案:

    $qb = $this->assetRepository->createQueryBuilder('asset');
    $qb->where('asset.code.currency = :currency')
        ->setParameter('currency', $currencyCode);
    $result = $qb->getQuery()->getOneOrNullResult();
    return $result;
结果表明,不需要内部联接。不知道为什么,也许有人能及时回答这个问题,但是上面的内容似乎适用于嵌入式对象

希望这对其他人有所帮助。

“嵌入式关联”不存在。因此,您不需要加入

嵌入的属性是实体的一部分以及其他属性

你必须这样做:

选择u
来自用户u
你的地址在哪里
(在此查询中,您的实体是用户,您的嵌入地址是地址,而*城市是您的 嵌入式)

这在条令文档中得到了很好的解释: 不存在“嵌入式关联”。因此,您不需要加入

嵌入的属性是实体的一部分以及其他属性

你必须这样做:

选择u
来自用户u
你的地址在哪里
(在此查询中,您的实体是用户,您的嵌入地址是地址,而*城市是您的 嵌入式)

这在条令文档中得到了很好的解释: