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

时间:2013-11-20 13:58:16

标签: php zend-framework get

我在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
}

1 个答案:

答案 0 :(得分:1)

Zend表现得像预期的那样。你要求它返回一行。它应该什么都不做。所以,当它无法返回一行时会抛出异常。

  

我想要它,如果它找到了行,继续正常,如果没有显示   没有结果,没有提出异常。

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