[英]PHP Neo4J cypher query loop with another query breaks loop (LAUDIS Client)
從 Everyman Client 更改為 Laudis Client,以便 PHP 訪問 AURA DB (Neo4j)。
代碼:
$outerQuery = "MATCH (n) return n.name AS name";
$outerResult = $client->run($outerQuery);
foreach ($outerResult as $detailOut) {
$innerQuery = 'MATCH (n) WHERE n.name = "'.detailOut['name'].'" return n';
$innerResult = $client->run($innerQuery);
foreach ($innerResult as $detailIn) {
// do something
}
}
$client 是這樣構造的
// embedding Neo4J PHP DB driver
use Laudis\Neo4j\Authentication\Authenticate;
use Laudis\Neo4j\ClientBuilder;
// establish a client-object for database access
$client = ClientBuilder::create()
->withDriver(
'example',
$_ENV['db_url'],
Authenticate::basic($_ENV['db_username'], $_ENV['db_password'])
)
->build();
外部查詢獲得有效結果,但只要首先執行內部 db 語句,外部循環就會中斷 - 無論是否使用依賴參數。 您可以在語句之前執行代碼,這不是問題,但運行語句會終止外循環。 如果我注釋掉內部循環中的運行語句,則循環正確運行並顯示預期結果。 這些語句已經在 Neo4j 瀏覽器中進行了測試並且沒有問題,但即使使用像這些示例這樣的簡單語句,它也會破壞外部循環。
我唯一的猜測是,我不能像以前使用 Everyman Client 那樣將這些語句用於 LAUDIS 客戶端。
任何人都知道我需要更改什么或我需要使用哪些其他代碼來使內部循環語句依賴於外部循環結果的字段?
謝謝
它是否可能因為您缺少一個引號而中斷?
# before:
$innerQuery = 'MATCH (n) WHERE n.name = "'.detailOut['name'].'" return n";
'# after:
$innerQuery = 'MATCH (n) WHERE n.name = "'.detailOut['name'].'" return n"';
客戶端的 2.7 版導致了問題,很高興 2.8 版現在有了修復,因此問題得到解決:升級到最新版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.