簡體   English   中英

在 Doctrine 查詢生成器中使用數組實體

[英]Using Array Entity in Doctrine Query Builder


你好嗎?
我創建了一個數組實體。
 /** * @Groups({"event_rating_question", "portal"}) * * @ORM\Column(type="json", nullable=true) */ private?array $eventTypeIds = [];

在存儲庫中,如果請求參數在該數組實體中,我想獲得結果。
所以我創建了存儲庫 function ,例如:

 public function findQuestionsByEventType(int $eventTypeId) { $queryBuilder = $this->createQueryBuilder('item') ->andWhere(':eventTypeId MEMBER OF item.eventTypeIds') ->setParameter('eventTypeId', $eventTypeId) ->orderBy('item.sortOrder', 'ASC'); return $queryBuilder->getQuery()->getResult(); }

但我有如下錯誤:
“異常:[語義錯誤] 第 0 行,'eventTypeIds' 附近的第 88 列: Error: Invalid PathExpression. Must be a CollectionValuedAssociationField.
如果有人知道如何解決它,請告訴我。
謝謝。

您不能在 DQL 查詢中使用 json 字段作為數組。 為此,請創建一個自定義 function並將其注冊到您的 symfony 應用程序或使用現成的擴展 DoctrineJsonFunctions。 您需要 function JSON_CONTAINS來檢查該值是否在您的 json 數組中。

因此,如果您決定使用DoctrineJsonFunctions ,那么這里是一個使用示例:

安裝

composer require scienta/doctrine-json-functions

config/packages/doctrine.yaml中聲明一個 function

orm:
    dql:
        string_functions: 
            JSON_CONTAINS: Scienta\DoctrineJsonFunctions\Query\AST\Functions\Mysql\JsonContains

現在您可以在存儲庫中使用 function

public function findQuestionsByEventType(string $eventTypeId)
{
    $queryBuilder = $this->createQueryBuilder('item')
        ->where("JSON_CONTAINS(item.eventTypeIds, :eventTypeId) = true")
        ->setParameter('eventTypeId', $eventTypeId)
        ->orderBy('item.sortOrder', 'ASC');

    return $queryBuilder->getQuery()->getResult();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM