今天做了一个从老数据库里面有用的数据导入到新的数据库里面时,想到了用Qeephp框架来做,先把老数据库里面的有用的东西查询出来,再把在老数据库里面查询到的数据添加到新的数据库里面,这个思路有了,于是就开始动手做了。
刚才开始就想直接从查询到的数据直接插入到新的数据库里面。可是发现了一个蛋疼的问题,出现了这个的错误!
exception 'QDB_ActiveRecord_ChangingReadonlyPropException' with message 'Setting readonly property "id" on object "Textuser" instance.' in C:\wamp\www\myqeephp\lib\qeephp\library\orm\activerecord.php:708 #0 C:\wamp\www\myqeephp\app\controller\insertdata_controller.php(86): QDB_ActiveRecord_Abstract->__set('id', 8) #1 [internal function]: Controller_Insertdata->actionTest() #2 C:\wamp\www\myqeephp\app\controller\abstract.php(63): call_user_func_array(Array, Array) #3 C:\wamp\www\myqeephp\app\myapp.php(226): Controller_Abstract->execute('test', Array) #4 C:\wamp\www\myqeephp\public\index.php(14): MyApp->dispatching() #5 {main} 如果要改变对异常的处理,请修改文件 "C:\wamp\www\myqeephp\app\myapp.php" 的 exception_handler() 方法
|
结果发现在表在Model中默认就给主键加上了这个属性
// 主键应该是只读,确保领域对象的“不变量” 'id' => array('readonly' => true), |
发现主主键设置了只读,所以不能改主键的值 。于是就想到了把“‘id’ => array('readonly' => true)”注释掉。就把它改成了这样。
// ‘ id ’ => array('readonly' => ture),
于是我就再次运行了程序,结果意想不到的事出现了,给了个“OK”的提示。以为可以了,到数据库里面去看了一下,结果让我傻眼了,发现在数据库里根本就没有半条记录,此时的心情你应该懂的。想死感觉都有了。唉!改了来改去,最后还是没有一个结果,于是就问问经理,想让他帮我看看。
他过来一看,不要一分钟的事,立马就解决了。
$conn = Heuser::meta()->getConn(); $conn->execute($sql); |
当时我还看不懂,经过他详细的介绍,我知道了。知道怎么了。于是自己才能写下面的代码 :
方法一:
$conn = QDB::getConn(); $sql = "insert into user_count values('',$id,'','','','','','','','','','','','','','');"; //echo $sql; $handle = $conn -> execute($sql); if($handle){echo "数据插入成功! "."<br />";} |
方法二:
$test1 = new Textuser(); $test1 -> changePropForce('id',2); //强制更改主键的值 ,第1个参数为:属性名称,第2个参数为:要更改的值。 |
标签:更改主键的值。 |
总结:问题都在实践中找到了。经过这几天实践,发现的问题也就越多,能解决这些问题。说明了自己在实践中学到了东西。还要更加努力的学习。
我是菜鸟,我得先飞