我已经接管了CakePHP 2.9代码库,并对以下形式的代码感到困惑:
$chkFeed = $this->UserFeed->find('count', array('conditions' => array('UserFeed.user_id' => $userID)));
if ($chkFeed > 0) {
$this->UserFeed->deleteAll(array('UserFeed.user_id' => $userID));
}
确定if ...
防护没有必要吗?即使实际上没有行被删除,您也可以调用deleteAll
,对吗? This这么说,那为什么要有警卫呢?
“如果这里不需要护卫。
以下代码也可以完美地完成您的工作。由于deleteAll()双向工作匹配或不匹配。在两种情况下,它都将返回true。
$chkFeed = $this->UserFeed->find('count', array('conditions' => array('UserFeed.user_id' => $userID)));
$this->UserFeed->deleteAll(array('UserFeed.user_id' => $userID));
如果deleteAll仅在单个表中检查userID,则不必要进行[[if检查。
但是,默认情况下,deleteAll将在关联表中运行,每次执行此行时都会创建一个联接查询。尽管这对大多数人来说无关紧要,但您的性能不拘一格,并且会完全优化所有代码。