环境
- phalcon 3.3.2
- PHP 7.2
问题起始:
- 我弄了个小程序 坑代码,就是给这个博客写的一个 前端。
- 当我给小程序添加,点击标签,标签热度 自增 1的时候,挺好的。
代码如下:
// $id 是主键
$tag = Tags::findFirst($id);
// 热点自增 1
$tag->hot += 1;
$tag->save();
上述代码 没有问题。直接成功。
- 而当我给文章添加查看的时候,出现问题了。
代码如下:
// $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<字段名>(字段对应条件) 返回的是 模型对应的 对象。
现在了解到这么多,如有错误,还请大家留言指正。
评论已关闭