タイトルが近いスレッドがあるかもしれませんが、私はこの問題を解決できませんでした。次のクエリは、psqlコマンドラインやPostgreSQLクライアントアプリケーションから呼び出されたときに期待される結果を返しますが、Doctrine 2でクエリを実装すると、次のエラー/例外が発生します。Doctrine Cantがjsonクエリで結果を返す
raw_dataフィールドはJSONタイプです。
問合せ:
SELECT
DISTINCT (((p.raw_data ->> 'company') :: JSONB) ->> 'userId') :: INTEGER
FROM schema.projects p
WHERE p.raw_data :: JSONB ? 'company'
AND (p.raw_data ->> 'company') :: JSONB ? 'userId'
AND (((p.raw_data ->> 'company') :: JSONB) ->> 'userId') :: INTEGER > 0
AND p.is_deleted = FALSE
LIMIT 20;
-- Returns 20 results
Doctrineの実装:
public function fetchResulst()
{
$sql = "
SELECT
DISTINCT (((p.raw_data ->> 'company') :: JSONB) ->> 'userId') :: INTEGER
FROM schema.projects p
WHERE p.raw_data :: JSONB ? 'company'
AND (p.raw_data ->> 'company') :: JSONB ? 'userId'
AND (((p.raw_data ->> 'company') :: JSONB) ->> 'userId') :: INTEGER > 0
AND p.is_deleted = FALSE
LIMIT 20
)";
return $this->_em->getConnection()->executeQuery($sql)->fetchAll();
}
レスポンス(例外)
Doctrine \ DBAL \ Exception \ SyntaxErrorException
An exception occurred while executing ' SELECT DISTINCT (((p.raw_data ->> 'company') :: JSONB) ->> 'userId') :: INTEGER FROM listing.projects p WHERE p.raw_data :: JSONB ? 'company' AND (p.raw_data ->> 'company') :: JSONB ? 'userId' AND (((p.raw_data ->> 'company') :: JSONB) ->> 'userId') :: INTEGER > 0 AND p.is_deleted = FALSE LIMIT 20) ': SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$1" LINE 5: WHERE p.raw_data :: JSONB $1 'company'^
RAW_DATAペイロードの「会社のフィールドの内容は以下の通りです。
"company": {
"CompanyID": 112233445566,
"URL": null,
"CompanyName": "Some Real Estate Bla bla Contact Office",
"PartyNature": "Contact Office",
"CompanyType": 26,
"SubNature": null,
"Description": "",
"DescriptionLocal": "",
"ImagePath": null,
"Phone1": "+90 987 111 11 11",
"Phone2": "",
"Fax": null,
"ContactEmail": "[email protected]",
"NatureID": null,
"PartySubNatureID": null,
"CityID": "123",
"CountyID": "456",
"DistrictID": "789",
"id": 14487,
"userId": 35754
}
バージョン: Postgresqlの:PostgreSQLの9.5.2 x86_64版 - リンゴ - darwin14.5.0上、アップルLLVMのバージョン7.0.2(打ち鳴らす-700.1.81)、64ビットでコンパイル
ドクトリン - DBAL:V2.5.2
は、あなたに非常に多くの@hkulekciに感謝:DBライブラリの
多くは、この問題を持っています – ilhnctn