使用DQL嵌套条件

per*_*ter 4 php doctrine 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);
Run Code Online (Sandbox Code Playgroud)

现在这会生成以下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
Run Code Online (Sandbox Code Playgroud)

但是我得到一组结果,其中deleted_at为null或其他条件已完成,我想使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
Run Code Online (Sandbox Code Playgroud)

你可以看到我刚刚更改了AND的第一个OR语句,并添加了几个括号来组合LIKE条件.

在DQL中使用相同的 - > where()表示法避免写下整个条件是否可行?

谢谢 :)

Sco*_*t M 5

不知道最近这次更改是如何进行的,但是对于像我这样的人来问这个问题很久以后问这个问题,查询构建器现在有办法完成嵌套的AND/OR逻辑:andX()/ orX()functions.