P

phalcon 模型 新发现

xyj2156 PHP 2018-05-20

环境

  • phalcon 3.3.2
  • PHP 7.2

问题起始:

  1. 我弄了个小程序 坑代码,就是给这个博客写的一个 前端。
  2. 当我给小程序添加,点击标签,标签热度 自增 1的时候,挺好的。

代码如下:

//    $id 是主键
    $tag = Tags::findFirst($id);
//   热点自增 1
    $tag->hot += 1;
    $tag->save();

上述代码 没有问题。直接成功。

  1. 而当我给文章添加查看的时候,出现问题了。

代码如下:

//        $slug 是自定义的一个索引
   if (!$slug || !($res = Posts::findFirst(['conditions' => "slug='{$slug}'"]))) {
       $this->response->setRawHeader("HTTP/1.1 404 Not Found");
       return $this->view->disable();
   }
//        文章 自增 1
    $res->view_count += 1;
   $res->save();

上述代码有问题了。

提示 没有save 方法。打开调试一看,原来不是 模型实例化的对象了。

而变成 \Phalcon\Mvc\Model\Row 的 对象了。

源码看不懂 找其他办法吧,网上找。

其中我就想着试用一下我自己的办法,把 row 对象的 主键和 自增的字段拷贝到我新实例化的对象上面。再save,直接报错,说其他几个字段,必须填写,果断放弃。

无意间在官方文档看到 findFirstBy<cloumnsName> 这个静态方法 试了一下,真好 返回的是 数据库模型的对象。

代码修改如下:

    if (!$slug || !($res = Posts::findFirstBySlug($slug))) {
        $this->response->setRawHeader("HTTP/1.1 404 Not Found");
        return $this->view->disable();
    }
//        文章 自增 1
$res->view_count += 1;
$res->save();

ok 成功了。

总结下

findFiist 传进主键 直接返回 模型的对象,传进去条件等数组 返回一个 ROW 对象

findFirstBy<字段名>(字段对应条件) 返回的是 模型对应的 对象。

现在了解到这么多,如有错误,还请大家留言指正。

PREV
积累一下 PHP 魔术方法
NEXT
博客升级了

评论(0)

评论已关闭