检查CakePHP 3中的实体是否为空

时间:2016-10-07 20:22:53

标签: php cakephp

我正在尝试找出CakePHP中我的$约会实体是否为空,但这不起作用:

$appointment = $this->Appointments->get($id);

if($appointment->isEmpty()) {
    throw new NotFoundException("invalid appointment");
}

错误:

  

错误:调用未定义的方法   应用\模型\实体\预约::的isEmpty()

这样做的正确方法是什么? docs表示它适用于QueryResultSet,但我需要提供上述代码。

2 个答案:

答案 0 :(得分:4)

您似乎正在尝试Get a Single Entity by Primary Key。如果是这种情况,那么您不应该验证它是否已找到,如果不是,则不应该抛出您自己的例外情况。从我在文档中看到的内容,框架将自动为您做到这一点。

  

如果get操作没有找到任何结果,将引发Cake \ Datasource \ Exception \ RecordNotFoundException。您可以自己捕获此异常,也可以允许CakePHP将其转换为404错误。

答案 1 :(得分:0)

您需要手动处理异常。遵循这种方法:

/* Mention this on top of your page */
use Cake\Datasource\Exception\RecordNotFoundException;
use Cake\Network\Exception\NotFoundException;

public function test()
{
    try {
        $appointment = $this->Appointments->get($id);
    } catch (RecordNotFoundException $e) {
        $appointment = [];
    } 
    if (!$appointment) {
        $this->Flash->error(__("Invalid appointment"));
        return $this->redirect($this->referer());
    }
}