我正在研究Yii项目.在Yii模型上执行save()时,如何使用
MySQL(
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html)的ON DUPLICATE功能?
我的MysqL如下:
CREATE TABLE `ck_space_calendar_cache` ( `space_id` int(11) NOT NULL,`day` date NOT NULL,`available` tinyint(1) unsigned NOT NULL DEFAULT '0',`price` decimal(12,2) DEFAULT NULL,`offer` varchar(45) DEFAULT NULL,`presale_date` date DEFAULT NULL,`presale_price` decimal(12,`value_x` int(11) DEFAULT NULL,`value_y` int(11) DEFAULT NULL,PRIMARY KEY (`space_id`,`day`),KEY `space` (`space_id`),CONSTRAINT `space` FOREIGN KEY (`space_id`) REFERENCES `ck_space` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我的PHP如下:
$cache = new SpaceCalendarCache(); $cache->attributes = $day; //Some array with attributes $cache->save();
如果我的主键(sapce_id,day)中有重复项,我不希望它抱怨,我只是想用最新数据进行更新.
你正在使用Yii中的模型,它非常简单..尝试加载你怀疑有重复条目的模型,如果你发现模型被加载的条目,则返回null.现在,如果您的模型为null,则只需创建新模型. rest是插入新记录的正常代码.
//try to load model with available id i.e. unique key $model = someModel::model()->findByPk($id); //now check if the model is null if(!$model) $model = new someModel(); //Apply you new changes $model->attributes = $attributes; //save $model->save();
请参阅示例应用程序Yii博客中的post controllers update方法.对于函数名称的拼写我可能有问题,对不起.