检查记录的方法是否存在于数据库中,然后如果是CakePHP中的真实返回记录?

时间:2015-05-11 09:12:23

标签: php mysql cakephp

我是CakePHP的新开发者,我对这个案子感到不满:

现在我有一个表用户模型用户,我想检查id = 4的记录是否存在:如果记录存在,则返回它,如果没有返回消息错误,我认为有2种方法:

解决方案1:

$this->Model->id = 4;

if ($this->Model->exists()) {
 return $this->Model->read();
} else {
 return "ERROR";
}

解决方案2:

$data = $this->Model->find('first', array(
 'conditions' => array('Model.id' => 4)
));

if (!empty($data)) {
 return $data;
} else {
 return "ERROR";
}

我不知道什么是更好或更优化(我认为解决方案1蛋糕会做2个查询,是吗?),请给我答案以获得最佳解决方案。请为我的英语不好。

2 个答案:

答案 0 :(得分:1)

不需要两个查询。

class FooModel extends Model {
    public function view($id) {
        $result = $this->find('first', [
            'conditions' => [
                $this->alias . '.' . $this->primaryKey => $id
            ]
        ]);
        if (empty($result)) {
            throw new \NotFoundException('Foo record not found');
        }
    }
    return $result;
}

然后只需在控制器操作中调用该方法:

public function view($id) {
    $this->set('foo', $this->FooModel->view($id));
}

如果你想做除显示未找到错误之外的其他事情,请捕获异常。

答案 1 :(得分:0)

当然。对于1,将有two个查询 - 第一个将是count,第二个将fetch记录。

我更喜欢第二种方法。运行query,然后检查empty数据。