资讯专栏INFORMATION COLUMN

phalcon中save方法的用法和update方法

Render / 1819人阅读

摘要:我们来看看一个方法用法。中的方法,他是一个集添加和修改与一身的一个方法。在上面的这个方法中他会自动识别,在数组中有没有主键,主键存在执行修改执行添加但是我们会发现,将中没有的字段,他会清空。

我们来看看一个save方法用法。

phalcon中的save方法,他是一个集 添加 和 修改 与一身的一个方法。

</>复制代码

  1. $this->someModel->save($data);

在上面的这个方法中他会自动识别,在$data 数组中有没有 主键,

</>复制代码

  1. if(主键存在){
  2. 执行修改;
  3. }else{
  4. 执行添加
  5. }

但是我们会发现,将$data 中没有的字段,他会清空。

下面由marser的phalconCMS中我们可以看到,做了这样的处理

</>复制代码

  1. /**
  2. * 封装phalcon model的update方法,实现仅更新数据变更字段,而非所有字段更新
  3. * @param array|null $data
  4. * @param null $whiteList
  5. * @return bool
  6. */
  7. public function iupdate(array $data=null, $whiteList=null){
  8. if(count($data) > 0){
  9. $attributes = $this -> getModelsMetaData() -> getAttributes($this);
  10. $this -> skipAttributesOnUpdate(array_diff($attributes, array_keys($data)));
  11. }
  12. return parent::update($data, $whiteList);
  13. }

其中getModelsMetaData

</>复制代码

  1. /**
  2. * Returns the models meta-data service related to the entity instance
  3. *
  4. * @return PhalconMvcModelMetaDataInterface
  5. */
  6. public function getModelsMetaData() {}

zephir源码

</>复制代码

  1. /**
  2. * Returns the models meta-data service related to the entity instance
  3. */
  4. public function getModelsMetaData() ->
  5. {
  6. var metaData, dependencyInjector;
  7. let metaData = this->_modelsMetaData;
  8. if typeof metaData != "object" {
  9. let dependencyInjector = this->_dependencyInjector;
  10. /**
  11. * Obtain the models-metadata service from the DI
  12. */
  13. let metaData = dependencyInjector->getShared("modelsMetadata");
  14. if typeof metaData != "object" {
  15. throw new Exception("The injected service "modelsMetadata" is not valid");
  16. }
  17. /**
  18. * Update the models-metadata property
  19. */
  20. let this->_modelsMetaData = metaData;
  21. }
  22. return metaData;
  23. }

和getAttributes

</>复制代码

  1. /**
  2. * Returns table attributes names (fields)
  3. *
  4. * @param PhalconMvcModelInterface $model
  5. * @return array
  6. */
  7. public function getAttributes(PhalconMvcModelInterface $model);

还有skipAttributesOnUpdate

</>复制代码

  1. /**
  2. * Sets a list of attributes that must be skipped from the
  3. * generated UPDATE statement
  4. *
  5. * skipAttributesOnUpdate(array("modified_in"));
  6. * }
  7. * }
  8. *
  9. *
  10. * @param array $attributes
  11. */
  12. protected function skipAttributesOnUpdate(array $attributes) {}

zephir源码

</>复制代码

  1. /**
  2. * Sets a list of attributes that must be skipped from the
  3. * generated UPDATE statement
  4. *
  5. *
  6. * skipAttributesOnUpdate(
  7. * [
  8. * "modified_in",
  9. * ]
  10. * );
  11. * }
  12. * }
  13. *
  14. */
  15. protected function skipAttributesOnUpdate(array! attributes) -> void
  16. {
  17. var keysAttributes, attribute;
  18. let keysAttributes = [];
  19. for attribute in attributes {
  20. let keysAttributes[attribute] = null;
  21. }
  22. this->getModelsMetaData()->setAutomaticUpdateAttributes(this, keysAttributes);
  23. }

都是phalcon自带的

用下面方式进行保存

</>复制代码

  1. $result = $this -> iupdate($data);

这样就将数据被清空的问题解决了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22362.html

相关文章

  • 【踩过坑】[web]1.生产与灰度数据缓存;2.Mysql主从不同步;

    摘要:方法,如图总结因为灰度环境在公司内网,访问量较小,相比方法,方法可以暂时解决灰度测试时的缓存问题。但是仍然存在风险。 背景:php做web开发,MVC,phalcon 1.生产与灰度数据缓存 原因: service层获取数据,有新增数据字段; controller层是通过redisCache调用service接口; redisCache采用redis-file双缓存结构,可能存在...

    sixgo 评论0 收藏0
  • PHP框架Phalcon 之 ACL

    摘要:一般至少要在执行路由前要判断用户是否具有权限一般在中,所以应该在它之前获得填充。以下代码可参考这里的方法就是重点。参考这里把对象保存在中。 showImg(https://segmentfault.com/img/bVkdih); 使用如下图解释这个组件: showImg(https://segmentfault.com/img/bVkdii); 实际最终真正要使用的是access_l...

    mikyou 评论0 收藏0
  • PHP-Phalcon框架数据库操作

    摘要:本文描述了框架中数据库操作方法,主要讨论框架的组件中的操作方法。属性方法在框架中支持属性的扩展查询,在上例中,可以把条件语句改为同时省略查询条件结果不变。 本文描述了PHP-Phalcon框架中数据库操作方法,主要讨论Phalcon框架的Model组件中的操作方法。更详细的Model介绍请参考:官方文档 1. 连接数据库 在Phalcon框架中,通过在DI中注入db参数来实现数据库的...

    xiaotianyi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<