[英]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.