加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Yii INSERT …重复更新

发布时间:2020-12-13 18:29:00 所属栏目:PHP教程 来源:网络整理
导读:我正在研究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
我正在研究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方法.对于函数名称的拼写我可能有问题,对不起.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读