簡體   English   中英

使用Doctrine 2的QueryBuilder創建復雜的查詢

[英]Using Doctrine 2's QueryBuilder to create complex queries

我正在嘗試使用MySQL數據庫和Doctrine 2作為ORM在PHP 7中編寫自己的登錄腳本。 不幸的是,當我嘗試從數據庫中獲取數據時(例如,用戶通過登錄名登錄帳戶),我得到了Doctrine\\ORM\\Query\\QueryException

我遵循代碼優先方法,並按如下所述創建用戶帳戶的實體,以及Doctrine 2實體管理器。 我有什么想念的嗎? 使用簡單的->findall()獲取數據可以正常工作。

我嘗試建立的查詢:

$query = DatabaseManager::_instance()->createQuery("SELECT a FROM " . LoginAccountDTO::class . " a WHERE a.username = ?1");

或使用查詢生成器:

$qb = DatabaseManager::_instance()->createQueryBuilder();
$qb->select('account')
    ->from(LoginAccountDTO::class, 'account')
    ->where('account.username = ?1 OR account.email = ?1')
    ->setParameter(1, $username);

(以及對主義的expr()充分測試)。

創建的DQL如下:

"SELECT a FROM Entities\LoginAccountDTO account WHERE account.username = ?1 or account.email = ?1"

現在,每次我嘗試->getResult()查詢時,都會得到以下錯誤輸出:

致命錯誤:未被捕獲的學說\\ ORM \\ Query \\ QueryException:從(實體目錄)\\ vendor \\ doctrine \\ orm \\ lib \\ Doctrine \\ ORM \\ Query \\ QueryException.php中的a.username =?1中選擇一個FROM Entities \\ LoginAccountDTO :43堆棧跟蹤:#0(項目目錄)\\ vendor \\ doctrine \\ orm \\ lib \\ Doctrine \\ ORM \\ Query \\ Parser.php(487):Doctrine \\ ORM \\ Query \\ QueryException :: dqlError('SELECT帳戶FROM K ...')#1(項目目錄)\\ vendor \\ doctrine \\ orm \\ lib \\ Doctrine \\ ORM \\ Query \\ Parser.php(987):Doctrine \\ ORM \\ Query \\ Parser-> semanticalError('line 0,col 14 ...',數組)#2(項目目錄)\\ vendor \\ doctrine \\ orm \\ lib \\ Doctrine \\ ORM \\ Query \\ Parser.php(1728):Doctrine \\ ORM \\ Query \\ Parser-> validateAbstractSchemaName('Entities \\ Accoun')#3(項目目錄)\\ vendor \\ doctrine \\ orm \\ lib \\ Doctrine \\ ORM \\ Query \\ Parser.php(1578):Doctrine \\ ORM \\ Query \\ Parser-> RangeVariableDeclaration()#4(項目- dir)\\ ve in (project-dir)\\ vendor \\ doctrine \\ orm \\ lib \\ Doctrine \\ ORM \\ Query \\ QueryException.php在第65行

Doctrine的配置應該是正確的,因為如果嘗試通過->findAll()獲取數據,則可以看到存儲的數據。 實體也可以在數據庫中正確創建。

我試圖像文檔中所述使用Doctrine 2(.6.0),但沒有成功。 可以請任何人幫助我使用Doctrine的查詢字符串/准備好的查詢中的where子句從數據庫中獲取數據嗎?

我發現,此問題的解決方案對我來說是安靜的:問題是由於使用實體類的類中缺少import語句而引起的。 教義只是回應致命錯誤。

簡而言之,解決方案:始終導入將由類使用的實體。

暫無
暫無

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

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