我遇到了一些問題,可能是一個簡單的問題。在symfony查詢中結合了兩個變量
我需要能夠查詢兩個單獨的變量作爲一個關鍵使用原則,但我不知道是否需要更新實體模式(我寧願不是,似乎矯枉過正)能夠做這個。
我目前需要在一個字段中的單個DQL查詢中查詢多個不同的項目。我一直在做這樣的事情:
$qb->select('r')->from('Bundle:Reviews\Review', 'r')
->leftJoin('Bundle:Bibliographies\PersonalName', 'p', 'WITH', 'p.biblio = r.id')
->leftJoin('r.biblio', 'bib')
->where('bib.author LIKE ?1 OR p.surname LIKE ?1');
到目前爲止這麼好。我遇到的問題是,與包含姓和名的Review實體中的author
不同,自動存儲在PersonalName表上(作爲針對Bibliography的一對多存在),因此不存在單個字段。我有姓,但我真正需要的是這樣的:
->where('bib.author LIKE ?1 OR "p.surname", "p.givenName" LIKE ?1');
這當然不會工作。
爲了簡便,有沒有辦法做這樣的事情創建是一個複合存儲庫的變量,把它定義爲一個參數(例如$params[3]
,然後做這樣的事>
->where('bib.author LIKE ?1 OR ?3 LIKE ?1');
否則,我可能會被罰款,在實體做,但我不完全知道如何做到這一點
的PersonalName實體有這樣的事情:
/**
* @var string
*
* @ORM\Column(name="given_name", type="string", length=255, nullable=true)
*/
private $givenName;
/**
* @var string
*
* @ORM\Column(name="surname", type="string", length=255, nullable=true)
*/
private $surname;
有沒有一種簡單的方法來創建一個新名稱和givenName組合而不必更新實體的新屬性?我一直在試圖找到手冊中的東西,但是,唉,沒有骰子。
任何幫助表示讚賞。
編輯澄清:
我真正需要的是在我的where子句給我這樣的事情:
->where('bib.author LIKE ?1 OR (CONCAT(p.surname,CONCAT(", ",p.givenName)) LIKE ?1)')
不幸的是,我在那裏得到非常好的效果早些時候姓搜索或作者的子字符串,我現在得到零結果,這對我來說毫無意義,因爲有一個明確的OR
。我不確定這是在打破查詢。
我不認爲我明白...爲什麼不只是做'筆者= 1個或姓氏= 1或給定名稱= 1'????如果您需要查詢sur + givenName的組合,您可以添加'OR CONCAT(surname,CONCAT(「」,givenName))=?1「。 – ccKep
@ccKep這看起來像一個好方法(特別是CONCAT部分),但是當我這樣做時,它以某種方式打破了我的查詢並得到零結果。我試過這個' - > where('bib.author LIKE?1 OR(CONCAT(p.surname,CONCAT(「,」,p.givenName))LIKE?1)')'(將OR語句包裝在parens中)但它打破查詢的事實對我來說毫無意義。它不應該至少拉動作者的結果嗎? – nomistic
@cc謝謝!我只是意識到在DQL中單引號內有雙引號存在問題,但你的回答基本上回答了我的問題 – nomistic