php – Yii INSERT …重复更新

前端之家收集整理的这篇文章主要介绍了php – Yii INSERT …重复更新前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究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)中有重复项,我不希望它抱怨,我只是想用最新数据进行更新.

我知道如何在原始sql中执行此操作,我只是想知道是否有一个干净的Yii方法来做到这一点.

你正在使用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方法.对于函数名称的拼写我可能有问题,对不起.

猜你在找的PHP相关文章