我在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
}
答案 0 :(得分:1)
Zend表现得像预期的那样。你要求它返回一行。它应该什么都不做。所以,当它无法返回一行时会抛出异常。
我想要它,如果它找到了行,继续正常,如果没有显示 没有结果,没有提出异常。
您最好的选择是将数据库调用放在try catch块中,捕获异常,然后解析异常以确定是否找不到行。