我正在嘗試在MySQL數(shù)據(jù)庫(kù)中的教義DQL中使用類似比較。它直接在 SQL 數(shù)據(jù)庫(kù)中工作,如下所示:SELECT *, (name LIKE '%testO%') as partOfNamefrom organizationORDER BY partOfName DESC;這工作得很好。現(xiàn)在我試著在教義中實(shí)現(xiàn)這個(gè)邏輯。我的查詢構(gòu)建器如下所示:oQueryBuilder ->from(OrganizationEntity::class, organization) ->select('organization') ->addSelect('(organization.name LIKE %:searchTerm%) AS searchTermIsPartOfName') ->setParameter('searchTerm', $sSearchTerm) ->orderBy('searchTermIsPartOfName', 'DESC');嘗試運(yùn)行它或從中獲取SQL會(huì)給我以下錯(cuò)誤:[語法錯(cuò)誤] 行 0,col 97:錯(cuò)誤:預(yù)期原則\ORM\查詢\詞法::T_CLOSE_PARENTHESIS,得到“LIKE”這絕對(duì)是關(guān)于 LIKE 的部分。我注釋了最后三行,它的工作原理。如何將上述工作 SQL 轉(zhuǎn)換為教義 DQL?
2 回答

一只名叫tom的貓
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
LIKE表達(dá)式包含在 DQL 語法中的條件表達(dá)式中。不幸的是,不可能直接在 .SelectExpression
但是,您可以在 中使用它們,這些可以在 中使用它們,并且可以復(fù)制相同的行為:CaseExpressionSelectExpression
->addSelect('CASE WHEN (organization.name LIKE :searchTerm) THEN 1 ELSE 0 END AS searchTermIsPartOfName')
->setParameter('searchTerm', "%{$sSearchTerm}%")
(你的表達(dá)式還有一個(gè)小問題 - 我很確定符號(hào)需要是參數(shù)值的一部分,而不是查詢本身)LIKE%

狐的傳說
TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
你忘了在 LIKE 之后,用字符串替換''
->addSelect('(organization.name LIKE %:searchTerm%) AS searchTermIsPartOfName')
上
->addSelect('(organization.name LIKE \'%:searchTerm%\') AS searchTermIsPartOfName')
- 2 回答
- 0 關(guān)注
- 83 瀏覽
添加回答
舉報(bào)
0/150
提交
取消