現在我已經閱讀了所有的DQL文檔,我仍然有一些疑惑,我 試圖在我的DQL做一些嵌套的矛盾,但與DQL打 我似乎無法做到存檔他們嵌套條件與DQL
爲了讓自己更清楚:
我有這個DQL查詢
$q = Doctrine_Query::create()
->select('c.nombre,c.webpage')
->addSelect('COUNT(m.marca_id) as total_marcas')
->from('Corporativos c')
->leftJoin('c.Marcas m')
->groupBy('c.corporativo_id')
->where('ISNULL(c.deleted_at)')
->orwhere('c.nombre LIKE :nombre', array(':nombre'=>'%'.$srch))
->orWhere('c.nombre LIKE :nombre', array(':nombre'=>'%'.$srch.'%'))
->orWhere('c.nombre LIKE :nombre', array(':nombre'=>$srch.'%'))
->orderBy('c.nombre ASC')
->limit(0,20);
現在這個生成以下MySQL查詢:
SELECT c.corporativo_id AS c__corporativo_id, c.nombre AS c__nombre,
c.webpage AS c__webpage, COUNT(m.marca_id) AS m__0 FROM corporativos c
LEFT JOIN marcas m ON c.corporativo_id = m.corporativo_id WHERE
(ISNULL(c.deleted_at) OR c.nombre LIKE :nombre OR c.nombre
LIKE :nombre OR c.nombre LIKE :nombre) GROUP BY c.corporativo_id ORDER
BY c.nombre ASC
但是我得到一組結果的情形之一deleted_at爲空 或其他條件完成後,我想使 ISNULL(deleted_at)強制性的,如果我們在SQL中的條款進行了交談 查詢應該是這樣的:
SELECT c.corporativo_id AS c__corporativo_id, c.nombre AS c__nombre,
c.webpage AS c__webpage, COUNT(m.marca_id) AS m__0 FROM corporativos c
LEFT JOIN marcas m ON c.corporativo_id = m.corporativo_id WHERE
(ISNULL(c.deleted_at) AND (c.nombre LIKE :nombre OR c.nombre
LIKE :nombre OR c.nombre LIKE :nombre)) GROUP BY c.corporativo_id
ORDER BY c.nombre ASC
你可以看到,我只是改變了第一或語句的AND和 增加了幾個圓括號來分組LIKE條件。
是否可以在DQL中使用相同的存檔來存檔 - > where() 表示法避免寫下整個條件?
謝謝:)
鏈接被破壞,這不是問題的實際解決方案。你可能想要更新它。 – pid 2015-07-14 08:31:03