文档章节

phalcon两种create方法的区别

Garfieldeee
 Garfieldeee
发布于 2015/11/16 20:46
字数 334
阅读 72
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

今天又碰到phalcon的一个坑了

phalcon版本2.0.8

Model类create方法,代码示例有两种方式

//Creating a new robot
$robot = new Robots();
$robot->type = 'mechanical';
$robot->name = 'Astro Boy';
$robot->year = 1952;
$robot->create();

//Passing an array to create
$robot = new Robots();
$robot->create(array(
      'type' => 'mechanical',
      'name' => 'Astroy Boy',
      'year' => 1952
));

以为都是一样的,但是用的过程碰到一个问题:用第二种方法,传递array做参数的时候,如果其中一个是主键,假设上例中type是主键,之前已经插入过一条mechanical的数据后,在create一个相同type的对象时,我以为应该会报错误,因为type为mechanical的数据已经存在了;然后实际并没有报错……

查看git上源码

public function create(var data = null, var whiteList = null) -> boolean
	{
		var metaData;

		let metaData = this->getModelsMetaData();

		/**
		 * Get the current connection
		 * If the record already exists we must throw an exception
		 */
		if this->_exists(metaData, this->getReadConnection()) {
			let this->_errorMessages = [
				new Message("Record cannot be created because it already exists", null, "InvalidCreateAttempt")
			];
			return false;
		}

		/**
		 * Using save() anyways
		 */
		return this->save(data, whiteList);
	}

判断exists是用metaData,metaData是通过对象的成员变量生成的,而参数的data并没有拿来检查,save中对于已存在的数据就update了,所以解决办法直接写个BaseModel里重写create方法

public function create($data=null, $whiteList=null)
  {
      if (is_array($data) && count($data) > 0 ){
          $this->assign($data, $whiteList);
        }
      return parent::create();
  }


© 著作权归作者所有

Garfieldeee
粉丝 0
博文 8
码字总数 4557
作品 0
海淀
程序员
私信 提问
phalcon验证(validation)的全面理解

文档中涉及验证有两种: PhalconValidation model中的validation() 方法 基本验证器 PhalconValidation是Phalcon的全局或者说通用验证器,也是所有验证器的基础,其他验证都是基于这个包装 ...

爬墙
2016/11/15
263
0
phalcon队列使用Queueing

参考资料: phalcon文档 phalcon queueing使用心得 Phalcon with Beanstalkd Beanstalkd介绍1 Beanstalkd介绍2 beanstalkd消息队列使用 phalcon beanstalk队列的choose和watch方法有什么区别...

爬墙
2016/08/18
162
0
phalcon-入门篇5(请求与返回)

本教程基于phalcon2.0.9版本 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 在节后上班的第一条小编已经迫不及待的来为大家带来今天的phalcon教程,今天所讲的是phalcon...

喵了_个咪
2016/02/16
602
0
依赖注册的简单接触

1.在组件内部创建依赖对象 首先,我们假设,我们要开发一个组件命名为SomeComponent。 这个组件中依赖一个数据库连接。 组件数据库连接对象,我们在组件中创建数据库连接对象 demo1: 在这个例...

金于虎
2016/12/23
6
3
phalcon 框架软删除与物理删除思考与实现

---title: phalcon 框架软删除与物理删除思考与实现date: 2018-09-11 11:44:36tags:PHP phalcon phalcon 框架软删除与物理删除思考与实现 在项目开发中,业务的不同则对数据库中数据的操作也是...

anziguoer
2018/09/11
56
0

没有更多内容

加载失败,请刷新页面

加载更多

超过了最大请求长度。

尝试在网站上上传视频时,出现错误“ 最大请求长度超出” 。 我该如何解决? #1楼 我认为这里没有提到它,但是要使其正常工作,我必须在web.config中提供以下两个值: 在system.web <httpRun...

javail
30分钟前
5
0
宝塔好用吗?

不少新手站长对服务器运维知识不擅长,不知道怎样管理好云服务器。如果有一个简单易用的面板,站长们就不需要去学习运维技巧,把这些就交给后端工程师就好。 宝塔算是目前市面上使用用户较多...

BirdCloud
35分钟前
5
0
第二代网关GateWay搭建流程

Spring Cloud第二代网关GateWay是由纯Netty开发,底层为Reactor,WebFlux构建,不依赖任何Servlet容器,它不同于Zuul,使用的是异步IO,性能较Zuul提升1.6倍。搭建过程如下(本次搭建的为子项目...

算法之名
38分钟前
20
0
Drools规则引擎详解-常用的drl实例

package droolsDemo//说明:每个 drl 都必须声明一个包名,这个包名与 Java 里面的不同,它不需要与文件夹的层次结构一致,//主要用于可以根据kmodule.xml中不同的package属性来指定加载...

蜗牛伊
41分钟前
6
0
如何在Android Studio中“选择Android SDK”?

将Eclipse-Android-Project成功导入“ Android Studio 1.4”后,出现错误 “请选择Android SDK” 当我单击该按钮以在模拟器中运行该应用程序时,但找不到任何方法。 当我单击“运行”时,此对...

技术盛宴
45分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部