今天做了一个从老数据库里面有用的数据导入到新的数据库里面时,想到了用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个参数为:要更改的值。

 

 

标签:更改主键的值。

 总结:问题都在实践中找到了。经过这几天实践,发现的问题也就越多,能解决这些问题。说明了自己在实践中学到了东西。还要更加努力的学习。