复制数据库中的一项并插入 [ 2.0 版本 ]
我想实现一个复制数据库中的某一项,在保留绝大多数相同字段值的情况下对某个字段值稍作修改,并且作为一项新的数据插入表中,我使用下面的语句:
$announce = Announce::findOne(7);
//echo $announce->title;
$announce->content = '新的内容';
var_dump($announce->insert());
运行结果提示在insert时,title字段为空导致运行错误(数据库格式中title字段有不能为空的设置),但是我echo的时候明明能出现原先的title值。
请问这是什么原因?如果我想实现上面提到的功能应该如何修改代码?
最佳答案
-
查看了一下框架的 源代码,yii 在插入一条新记录的时候,只插入了那些“脏”属性,为什么框架要这么设计,恐怕只能去问作者了,我觉得这里是 没有 这个必要的,直接插入全部的属性就是了,毕竟这是一个 insert 的操作,而不是 update (大家不妨在此 讨论下 作者设计成这样是出于 什么样的考虑)
至于你的问题,随便弄弄就行了,代码都 很简单,不需要 解释什么吧
1、$announce = Announce::findOne(7); $announce->id = null; $announce->isNewRecord = true; $announce->content = "新的内容"; $announce->insert();
2、
$announce = Announce::findOne(7); $announce2 = new Announce; $announce2->attributes = $announce->attributes; // 这里需要 rules 支持 $announce2->content = "新的内容"; $announce2->insert();
3、
$announce = Announce::findOne(7); $announce->content = "新的内容"; $announce->markAttributeDirty("title"); // 它不是要脏属性么,就标记给他 $announce->markAttributeDirty("..."); // 其它的字段 $announce->insert();
共 2 条回复
其他 1 个回答
捣捣爸
注册时间:2019-05-23
最后登录:2022-04-26
在线时长:9小时29分
最后登录:2022-04-26
在线时长:9小时29分
- 粉丝0
- 金钱105
- 威望10
- 积分295