zend get()单个记录返回异常,而不是零结果


zend get() single record returns exception instead of zero results

我在zend骨架中有一个非常简单的函数,它根据您输入的ID获取一行。如果你使用它在数据库中找到的ID,它可以正常工作:

$this->getTestimonialTable()->get($request->getPost('id'));

但是,如果您放入一个不存在的id,它会返回一个异常,表示该行不存在,我已经知道了。

我希望它是这样的,如果它找到了行,就照常继续,如果不显示没有结果,就不引发异常。

我试着把它包装成一个计数:

 if (count($this->getTestimonialTable()->get($request->getPost('id'))) > 0) {
     //more than 1 result
 } else {
     //zero results
 }

然而,在最初的调用中仍然出现异常,我也尝试将其封装在try语句中:

 try {
    $this->getTestimonialTable()->get($request->getPost('id'));
    //if im here i should have a result             
 } catch (Exception $e) {
     //zero results           
 }

有人能说明问题出在哪里吗?


已解决

所以原理是正确的,但是我在工厂方法上运行代码,而不是在数据库调用上运行它。

所以在我的工厂里,我现在有

public function get($id)
 {
    $id  = (int) $id;
    $rowset = $this->tableGateway->select(array('id' => $id));
    $row = $rowset->current();
    if (!$row) {
        return null;
    }
    return $row;
 }

然后使上述计数按预期工作

if (count($this->getTestimonialTable()->get($request->getPost('id'))) > 0) {
 //more than 1 result
} else {
     //zero results
}

Zend的行为符合预期。您已要求它返回一行。它不应该做更多的事情。所以,当它不能返回一行时,它会抛出一个异常。

我希望它是这样的,如果它找到了行,那么继续正常运行,如果不显示没有结果,没有引发异常。

最好的选择是将数据库调用放在try-catch块中,捕获异常,然后分析异常以确定是否未找到行。