脚本宝典收集整理的这篇文章主要介绍了php – 使用isNewRecord的Yii复合主键,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
$userCategory = new UserCategory; $userCategory->user_id = 1; $userCategory->category_id = 15; echo $userCategory->isNewRecord; //always true $userCategory->last_access = Now(); $userCategory->save();
{$userCategory-> isNewRecord}当我尝试save()时,MysqL会为复合主键生成重复错误.
public function PrimaryKey() { return array('user_id','category_id'); }
****更新:
对困惑感到抱歉.我的问题是如何在Yii框架中实现与“ON DUPLICATE KEY UPDATE”相同的结果.换句话说,如何在一个SQL查询中插入或更新.如果你看一下save()的源代码
public function save($runValidation=true,$attributes=null) { if(!$runValidation || $this->validate($attributes)) //checking if new record return $this->getIsNewRecord() ? $this->insert($attributes) : $this->update($attributes);** else return false; }
Here是关于IsNewRecord的官方文档.所以,问题是你正在使用
$userCategory = new UserCategory; //Always a new record,tries to INSERT
因此,要解决此问题,您必须找到记录并评估是否在保存之前找到它,而不是.关于find()系列方法及其返回值的文档也可以在Here中阅读,find()方法的返回值在性质上略有不同:
您可以使用此返回值来区分是否存在主键:
$userCategory = UserCategory::model()->findByAttributes(array('user_id '=>1,'category_id '=>15)); // if user does not exist,you need to create IT if ($userCategory == NULL) { $userCategory = new UserCategory; $userCategory->user_id = 1; $userCategory->category_id = 15; } echo $userCategory->isNewRecord; //you will see the difference if it does exist or not exist $userCategory->last_access = Now(); $userCategory->save();
这将确保框架正确使用INSERT或UPDATE语句,从而避免您获得的重复PK错误.
编辑:增强了示例代码,以便在新记录时正确填充记录.
以上是脚本宝典为你收集整理的php – 使用isNewRecord的Yii复合主键全部内容,希望文章能够帮你解决php – 使用isNewRecord的Yii复合主键所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。