如果没有插入yii则更新

时间:2013-07-10 22:11:19

标签: php yii

如果先前未插入值,我想更新表格中的值。这是我的代码 -

function save_data($date, $game, $score) {
    $criteria = new CDbCriteria;
    $criteria->addCondition("date = '{$date}'");
    $data = array("date" => $date,
        "game" => $game,
        "score" => $score);
    $game_report = new GameReport();
    $game_report->attributes = $data;
    $game_report->save();
}

但即使我提供了日期条件,它也会继续插入重复值。为什么?如何更新并不插入重复值?

2 个答案:

答案 0 :(得分:4)

要进行更新,您需要在已加载的数据库模型上执行此操作。 在您的情况下,可以这样做:

function save_data($date, $game, $score) {
    $criteria = new CDbCriteria;
    $criteria->addCondition("date = '{$date}'");

    $data = array(
        "date" => $date,
        "game" => $game,
        "score" => $score
    );

    $game_report = GameReport::model()->findByAttributes($data);
    if (empty($game_report)) {
        $game_report = new GameReport();
    }
    $game_report->attributes = $data;
    $game_report->save();
}

另外,为了避免sql注入,你应该绑定你的条件参数,如:

$criteria->addCondition("date = :d");
$criteria->params[':d'] = $date;

或简单地说:

$criteria->compare('date', $date);

答案 1 :(得分:2)

这就是我通常这样做的方式:

$myModel = myModel::model()->findByAttributes(array('atr1'=>$atr1, 'atr2'=>$atr2));
if($myModel == null){
//create and save new reccord
}

我不确定这是否是最佳方式,或者如果Yii有更好的方法,但它有效。