Yii记录没有插入DB

时间:2014-02-04 11:30:50

标签: database activerecord yii frameworks

以下是我的控制器&模型逻辑 - 我刚开始使用准系统Yii安装来更多地使用它。

我没有错误,但没有看到数据库中的新条目 - 我的数据库已在main.php中配置(这可以作为Gii运行)。

// controllers/PageController.php
class PageController extends Controller
{
    public function actionSave($value='')
    {
        $pageObj = new Page;
        $pageObj->savePage();
    }     
}


// models/Page.php

class Page extends CActiveRecord
{
/**
 * @return string the associated database table name
 */
public function tableName()
{
    return 'page';
}

/**
 * @return array validation rules for model attributes.
 */
public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('title, date_updated', 'required'),
        array('live', 'numerical', 'integerOnly'=>true),
        array('user_id', 'length', 'max'=>10),
        array('title', 'length', 'max'=>100),
        array('content, date_published', 'safe'),
        // The following rule is used by search().
        // @todo Please remove those attributes that should not be searched.
        array('id, user_id, live, title, content, date_updated, date_published', 'safe', 'on'=>'search'),
    );
}

/**
 * @return array relational rules.
 */
public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'comments' => array(self::HAS_MANY, 'Comment', 'page_id'),
        'user' => array(self::BELONGS_TO, 'User', 'user_id'),
        'files' => array(self::MANY_MANY, 'File', 'page_has_file(page_id, file_id)'),
    );
}

/**
 * @return array customized attribute labels (name=>label)
 */
public function attributeLabels()
{
    return array(
        'id' => 'ID',
        'user_id' => 'User',
        'live' => 'Live',
        'title' => 'Title',
        'content' => 'Content',
        'date_updated' => 'Date Updated',
        'date_published' => 'Date Published',
    );
}

/**
 * Retrieves a list of models based on the current search/filter conditions.
 *
 * Typical usecase:
 * - Initialize the model fields with values from filter form.
 * - Execute this method to get CActiveDataProvider instance which will filter
 * models according to data in model fields.
 * - Pass data provider to CGridView, CListView or any similar widget.
 *
 * @return CActiveDataProvider the data provider that can return the models
 * based on the search/filter conditions.
 */
public function search()
{
    // @todo Please modify the following code to remove attributes that should not be searched.

    $criteria=new CDbCriteria;

    $criteria->compare('id',$this->id,true);
    $criteria->compare('user_id',$this->user_id,true);
    $criteria->compare('live',$this->live);
    $criteria->compare('title',$this->title,true);
    $criteria->compare('content',$this->content,true);
    $criteria->compare('date_updated',$this->date_updated,true);
    $criteria->compare('date_published',$this->date_published,true);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}

/**
 * Returns the static model of the specified AR class.
 * Please note that you should have this exact method in all your CActiveRecord descendants!
 * @param string $className active record class name.
 * @return Page the static model class
 */
public static function model($className=__CLASS__)
{
    return parent::model($className);
}

public function savePage($value='')
{
    $page = new page;
    $model->isNewRecord = true;
    $model->primaryKey = NULL;
    $page->title='sample page';
    $page->content='content for the sample page';
    $page->save(false);
}
}

3 个答案:

答案 0 :(得分:8)

在Yii中,当您要插入包含一些空列的表时,必须在规则中将空列添加为SAFE,如下所示:

array('primaryKey','safe'),

现在,Yii知道primaryKey是一个空列。因此,通过插入当前模型没有问题。

请注意,当您使用FALSE调用save()方法时,您告诉模型不要在插入时进行验证。

此外,跳过可能错误的正确方法是在插入之前验证您的模型:

if($model->validate()){
    // VALIDATE, YOU CAN CALL SAVE FUNCTION
}else{
    //here you can send an error message via FLASH or you can debug what the exact error is like below:
    CVarDumper::dump($model->getErrors(),5678,true);
    Yii::app()->end();
}

我希望,它有所帮助

答案 1 :(得分:1)

这么简单......我有时讨厌Yii: - )

必须将save()设置为save(false)

    $page = new page;
    $page->isNewRecord = true;
    $page->primaryKey = NULL;
    $page->title='sample page';
    $page->content='content for the sample page';
    $page->save(false);

答案 2 :(得分:0)

谢谢你 - 我错过了一些专栏......(傻我) 在上面的帮助下进一步改进功能..

public function savePage()
{
    $page = new page;
    $page->isNewRecord = true;
    $page->primaryKey = NULL;
    $page->user_id = 1;
    $page->live = 0;
    $page->content='content for the sample page';
    $page->date_updated = date('Y-m-d H:i:s');
    $page->date_published = date('Y-m-d H:i:s');        
    $page->title='sample page';

    if ($page->validate()) {
        $page->save();
    } else {
        CVarDumper::dump($page->getErrors(),5678,true);
        Yii::app()->end();          
    }
}
相关问题