【发布时间】:2010-12-31 00:25:40
【问题描述】:
我有一个简单的教义代码:
$dql = Doctrine_Query::create() ->select('u.ident, u.username, u.email') ->from('用户 u, u.Attributes ua'); 如果($查询){ $dql->where('u.username LIKE ?', "%$query%") ->orWhere('u.name LIKE ?', "%$query%") ->orWhere('u.email LIKE ?', "%$query%"); } $dql->offset($start)->limit($count); $users = $dql->execute();使用分析器,我发现 Doctrine 将其作为两个单独的查询运行:
从用户 e3 中选择不同的 e3.ident LEFT JOIN userpolicies e4 ON e3.ident = e4.user_id 在哪里 e3.username LIKE ?或 e3.name LIKE ?或 e3.email 喜欢?限制 20 参数: 大批 ( [0] => %fam% [1] => %fam% [2] => %fam% )和
SELECT e.ident AS e__ident, e.username AS e__username, e.email AS e__email FROM users e LEFT JOIN userpolicies e2 ON e.ident = e2.user_id WHERE e.ident IN ('2', '40', '42', '44', '52', '53', '54', '55', '56', '58', '60', '61', '62', '64', '65', '66', '68', '70', '74', '82') AND e.username LIKE ?或 e.name LIKE ?或电子邮件喜欢? 参数: 大批 ( [0] => %fam% [1] => %fam% [2] => %fam% )这与我的想法不完全一致,因为即使在第一个查询中选择了“用户”中的匹配行之后,第二个查询也会再次应用 WHERE 条件(即,第二个查询应该以 WHERE e.ident IN () 停止)。这是我搞砸了还是 Doctrine 的预期行为?我正在使用学说 v1.1.6。
【问题讨论】: