Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii CDBEException在这里是什么意思?我如何解决它?_Yii - Fatal编程技术网

Yii CDBEException在这里是什么意思?我如何解决它?

Yii CDBEException在这里是什么意思?我如何解决它?,yii,Yii,拜托,我对Yii1.1完全是新手,我正在关注一个视频教程,我让benn试着密切关注。我正在尝试创建和更新相册模型,如视频教程中所示。我键入了演示者键入的所有内容:我的代码如下所示: 唱片控制器 类控制器扩展控制器 { /** *@var string视图的默认布局。默认为“//layouts/column2”,意思是 *使用两列布局。请参阅“protected/views/layouts/column2.php”。 */ public$layout='//layouts/column2' /*

拜托,我对Yii1.1完全是新手,我正在关注一个视频教程,我让benn试着密切关注。我正在尝试创建和更新相册模型,如视频教程中所示。我键入了演示者键入的所有内容:我的代码如下所示:

唱片控制器 类控制器扩展控制器 { /** *@var string视图的默认布局。默认为“//layouts/column2”,意思是 *使用两列布局。请参阅“protected/views/layouts/column2.php”。 */ public$layout='//layouts/column2'

/**
 * @return array action filters
 */
public function filters()
{
    return array(
        'accessControl', // perform access control for CRUD operations
        'postOnly + delete', // we only allow deletion via POST request
    );
}

/**
 * Specifies the access control rules.
 * This method is used by the 'accessControl' filter.
 * @return array access control rules
 */
public function accessRules()
{
    return array(
        array('allow',  // allow all users to perform 'index' and 'view' actions
            'actions'=>array('index','view'),
            'users'=>array('*'),
        ),
        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions'=>array('create','update'),
            'users'=>array('@'),
        ),
        array('allow', // allow admin user to perform 'admin' and 'delete' actions
            'actions'=>array('admin','delete'),
            'users'=>array('admin'),
        ),
        array('deny',  // deny all users
            'users'=>array('*'),
        ),
    );
}

/**
 * Displays a particular model.
 * @param integer $id the ID of the model to be displayed
 */
public function actionView($id)
{
    $this->render('view',array(
        'model'=>$this->loadModel($id),
    ));
}

/**
 * Creates a new model.
 * If creation is successful, the browser will be redirected to the 'view' page.
 */
public function actionCreate()
{
    $model=new Album;

    // Uncomment the following line if AJAX validation is needed
     $this->performAjaxValidation($model);

    if(isset($_POST['Album']))
    {
        $model->attributes=$_POST['Album'];
        if($model->save()){
            //$this->redirect(array('view','id'=>$model->id));
                            Yii::app()->user->setFlash('saved', 'Data saved!');
                            $this->redirect(array('update','id'=>$model->id));
                    }
                            else{
                Yii::app()->user->setFlash('failure', 'Data not saved!');
            }


           }

    $this->render('create',array(
        'model'=>$model,
    ));
}

/**
 * Updates a particular model.
 * If update is successful, the browser will be redirected to the 'view' page.
 * @param integer $id the ID of the model to be updated
 */
public function actionUpdate($id)
{
    $model=$this->loadModel($id);

    // Uncomment the following line if AJAX validation is needed
     $this->performAjaxValidation($model);

    if(isset($_POST['Album']))
    {
        $model->attributes=$_POST['Album'];
        if($model->save()){
            //$this->redirect(array('view','id'=>$model->id));
                            Yii::app()->user->setFlash('saved', "Data saved!");
                            $this->redirect(array('update','id'=>$model->id));
            }else{
                Yii::app()->user->setFlash('failure', "Data not saved!");
            }


}

      $this->render('update',array(
        'model'=>$model,
    ));

/**
 * Deletes a particular model.
 * If deletion is successful, the browser will be redirected to the 'admin' page.
 * @param integer $id the ID of the model to be deleted
 */
    }
public function actionDelete($id)
{
    $this->loadModel($id)->delete();

    // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
    if(!isset($_GET['ajax']))
        $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}

/**
 * Lists all models.
 */
public function actionIndex()
{
    $dataProvider=new CActiveDataProvider('Album');
    $this->render('index',array(
        'dataProvider'=>$dataProvider,
    ));
}

/**
 * Manages all models.
 */
public function actionAdmin()
{
    $model=new Album('search');
    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['Album']))
        $model->attributes=$_GET['Album'];

    $this->render('admin',array(
        'model'=>$model,
    ));
}

/**
 * Returns the data model based on the primary key given in the GET variable.
 * If the data model is not found, an HTTP exception will be raised.
 * @param integer $id the ID of the model to be loaded
 * @return Album the loaded model
 * @throws CHttpException
 */
public function loadModel($id)
{
    $model=Album::model()->findByPk($id);
    if($model===null)
        throw new CHttpException(404,'The requested page does not exist.');
    return $model;
}

/**
 * Performs the AJAX validation.
 * @param Album $model the model to be validated
 */
protected function performAjaxValidation($model)
{
    if(isset($_POST['ajax']) && $_POST['ajax']==='album-form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }
}
}

唱片模特班 /** *这是表“tbl_album”的模型类。 * *以下是表“tbl_album”中的可用列: *@property整数$id *@property string$name *@property string$tags *@property integer$owner\u id *@property integer$shareable *@property string$created\u dt * *以下是可用的模型关系: *@property User$owner *@property Photo[]$photos */ 类相册扩展了CActiveRecord { /** *@return string关联的数据库表名 */ 公共函数tableName() { 返回“tbl_相册”; }

}

摄影模特课 /** *这是表“tbl_photo”的模型类。 * *以下是表“tbl_photo”中的可用列: *@property整数$id *@property integer$album\u id *@property string$filename *@property字符串$caption *@property string$alt_text *@property string$tags *@property整数$sort\u顺序 *@property string$created\u dt *@property string$lastupdate\u dt * *以下是可用的模型关系: *@property Comment[]$comments *@property Album$Album */

课堂照片和录像 {
私有$上传

/**
 * @return string the associated database table name
 */



public function tableName()
{
    return 'tbl_photo';
}

/**
 * @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('album_id, sort_order', 'numerical', 'integerOnly'=>true),
        array('filename', 'length', 'max'=>500),
        array('tags', 'length', 'max'=>256),
        array('caption, alt_text, created_dt, lastupdate_dt', 'safe'),
        // The following rule is used by search().
        // @todo Please remove those attributes that should not be searched.
        array('id, album_id, filename, caption, alt_text, tags, sort_order, created_dt, lastupdate_dt', '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', 'photo_id'),
        'album' => array(self::BELONGS_TO, 'Album', 'album_id'),
    );
}

/**
 * @return array customized attribute labels (name=>label)
 */
public function attributeLabels()
{
    return array(
        'id' => 'ID',
        'album_id' => 'Album',
        'filename' => 'Filename',
        'caption' => 'Caption',
        'alt_text' => 'Alt Text',
        'tags' => 'Tags',
        'sort_order' => 'Sort Order',
        'created_dt' => 'Created Dt',
        'lastupdate_dt' => 'Lastupdate Dt',
    );
}

    public function getImageParam(){
     if(empty($this->_uploads)){
         $this->_uploads = Yii::app()->params['uploads']. "/";
         return $this->_uploads;
     }
 }
    public function getUrl(){
    return $this->getImageParam()."uploads/".CHtml::encode($this->filename); 
 }

 public function getThumb(){
     return $this->getImageParam()."thumbs/".CHtml::encode($this->filename);
 }


/**
 * 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);
    $criteria->compare('album_id',$this->album_id);
    $criteria->compare('filename',$this->filename,true);
    $criteria->compare('caption',$this->caption,true);
    $criteria->compare('alt_text',$this->alt_text,true);
    $criteria->compare('tags',$this->tags,true);
    $criteria->compare('sort_order',$this->sort_order);
    $criteria->compare('created_dt',$this->created_dt,true);
    $criteria->compare('lastupdate_dt',$this->lastupdate_dt,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 Photo the static model class
 */
public static function model($className=__CLASS__)
{
    return parent::model($className);
}
/**
 * @return string the associated database table name
 */



public function tableName()
{
    return 'tbl_photo';
}

/**
 * @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('album_id, sort_order', 'numerical', 'integerOnly'=>true),
        array('filename', 'length', 'max'=>500),
        array('tags', 'length', 'max'=>256),
        array('caption, alt_text, created_dt, lastupdate_dt', 'safe'),
        // The following rule is used by search().
        // @todo Please remove those attributes that should not be searched.
        array('id, album_id, filename, caption, alt_text, tags, sort_order, created_dt, lastupdate_dt', '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', 'photo_id'),
        'album' => array(self::BELONGS_TO, 'Album', 'album_id'),
    );
}

/**
 * @return array customized attribute labels (name=>label)
 */
public function attributeLabels()
{
    return array(
        'id' => 'ID',
        'album_id' => 'Album',
        'filename' => 'Filename',
        'caption' => 'Caption',
        'alt_text' => 'Alt Text',
        'tags' => 'Tags',
        'sort_order' => 'Sort Order',
        'created_dt' => 'Created Dt',
        'lastupdate_dt' => 'Lastupdate Dt',
    );
}

    public function getImageParam(){
     if(empty($this->_uploads)){
         $this->_uploads = Yii::app()->params['uploads']. "/";
         return $this->_uploads;
     }
 }
    public function getUrl(){
    return $this->getImageParam()."uploads/".CHtml::encode($this->filename); 
 }

 public function getThumb(){
     return $this->getImageParam()."thumbs/".CHtml::encode($this->filename);
 }


/**
 * 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);
    $criteria->compare('album_id',$this->album_id);
    $criteria->compare('filename',$this->filename,true);
    $criteria->compare('caption',$this->caption,true);
    $criteria->compare('alt_text',$this->alt_text,true);
    $criteria->compare('tags',$this->tags,true);
    $criteria->compare('sort_order',$this->sort_order);
    $criteria->compare('created_dt',$this->created_dt,true);
    $criteria->compare('lastupdate_dt',$this->lastupdate_dt,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 Photo the static model class
 */
public static function model($className=__CLASS__)
{
    return parent::model($className);
}
}

照片模型 /** *这是表“tbl_photo”的模型类。 * *以下是表“tbl_photo”中的可用列: *@property整数$id *@property integer$album\u id *@property string$filename *@property字符串$caption *@property string$alt_text *@property string$tags *@property整数$sort\u顺序 *@property string$created\u dt *@property string$lastupdate\u dt * *以下是可用的模型关系: *@property Comment[]$comments *@property Album$Album */

课堂照片和录像 {
私有$上传

/**
 * @return string the associated database table name
 */



public function tableName()
{
    return 'tbl_photo';
}

/**
 * @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('album_id, sort_order', 'numerical', 'integerOnly'=>true),
        array('filename', 'length', 'max'=>500),
        array('tags', 'length', 'max'=>256),
        array('caption, alt_text, created_dt, lastupdate_dt', 'safe'),
        // The following rule is used by search().
        // @todo Please remove those attributes that should not be searched.
        array('id, album_id, filename, caption, alt_text, tags, sort_order, created_dt, lastupdate_dt', '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', 'photo_id'),
        'album' => array(self::BELONGS_TO, 'Album', 'album_id'),
    );
}

/**
 * @return array customized attribute labels (name=>label)
 */
public function attributeLabels()
{
    return array(
        'id' => 'ID',
        'album_id' => 'Album',
        'filename' => 'Filename',
        'caption' => 'Caption',
        'alt_text' => 'Alt Text',
        'tags' => 'Tags',
        'sort_order' => 'Sort Order',
        'created_dt' => 'Created Dt',
        'lastupdate_dt' => 'Lastupdate Dt',
    );
}

    public function getImageParam(){
     if(empty($this->_uploads)){
         $this->_uploads = Yii::app()->params['uploads']. "/";
         return $this->_uploads;
     }
 }
    public function getUrl(){
    return $this->getImageParam()."uploads/".CHtml::encode($this->filename); 
 }

 public function getThumb(){
     return $this->getImageParam()."thumbs/".CHtml::encode($this->filename);
 }


/**
 * 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);
    $criteria->compare('album_id',$this->album_id);
    $criteria->compare('filename',$this->filename,true);
    $criteria->compare('caption',$this->caption,true);
    $criteria->compare('alt_text',$this->alt_text,true);
    $criteria->compare('tags',$this->tags,true);
    $criteria->compare('sort_order',$this->sort_order);
    $criteria->compare('created_dt',$this->created_dt,true);
    $criteria->compare('lastupdate_dt',$this->lastupdate_dt,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 Photo the static model class
 */
public static function model($className=__CLASS__)
{
    return parent::model($className);
}
/**
 * @return string the associated database table name
 */



public function tableName()
{
    return 'tbl_photo';
}

/**
 * @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('album_id, sort_order', 'numerical', 'integerOnly'=>true),
        array('filename', 'length', 'max'=>500),
        array('tags', 'length', 'max'=>256),
        array('caption, alt_text, created_dt, lastupdate_dt', 'safe'),
        // The following rule is used by search().
        // @todo Please remove those attributes that should not be searched.
        array('id, album_id, filename, caption, alt_text, tags, sort_order, created_dt, lastupdate_dt', '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', 'photo_id'),
        'album' => array(self::BELONGS_TO, 'Album', 'album_id'),
    );
}

/**
 * @return array customized attribute labels (name=>label)
 */
public function attributeLabels()
{
    return array(
        'id' => 'ID',
        'album_id' => 'Album',
        'filename' => 'Filename',
        'caption' => 'Caption',
        'alt_text' => 'Alt Text',
        'tags' => 'Tags',
        'sort_order' => 'Sort Order',
        'created_dt' => 'Created Dt',
        'lastupdate_dt' => 'Lastupdate Dt',
    );
}

    public function getImageParam(){
     if(empty($this->_uploads)){
         $this->_uploads = Yii::app()->params['uploads']. "/";
         return $this->_uploads;
     }
 }
    public function getUrl(){
    return $this->getImageParam()."uploads/".CHtml::encode($this->filename); 
 }

 public function getThumb(){
     return $this->getImageParam()."thumbs/".CHtml::encode($this->filename);
 }


/**
 * 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);
    $criteria->compare('album_id',$this->album_id);
    $criteria->compare('filename',$this->filename,true);
    $criteria->compare('caption',$this->caption,true);
    $criteria->compare('alt_text',$this->alt_text,true);
    $criteria->compare('tags',$this->tags,true);
    $criteria->compare('sort_order',$this->sort_order);
    $criteria->compare('created_dt',$this->created_dt,true);
    $criteria->compare('lastupdate_dt',$this->lastupdate_dt,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 Photo the static model class
 */
public static function model($className=__CLASS__)
{
    return parent::model($className);
}
}

我收到此错误:
CDbCommand未能执行SQL语句:SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败(
school2go2
tbl\u相册
,约束
tbl\u相册\u ibfk\u 1
外键(
owner\u id
)参考
tbl_user
id
)中关于更新时不执行任何操作的内容)。执行的SQL语句是:插入到
tbl\u相册
name
tags
description
shareable
created\u dt
所有者id
)值(:yp0,:yp1,:yp2,:yp3,NOW(),:yp4)


请原谅我对yii甚至StackOverflow都是新手。我仍在学习。

错误解释为:您试图插入一张没有相应所有者的相册


如果不知道你是如何得到这个错误的,就无法提供更多帮助。

谢谢你直截了当的回答。但请像我说的,我还是新的:你所说的“对应的所有者”是什么意思?你还需要什么进一步的信息。再次感谢您的耐心。“tbl_相册”中的所有者id必须与“tbl_用户”表中的一行相对应。您正在尝试插入一行(创建新相册),该行的所有者id值与用户不对应。如何解决这个问题取决于你想做什么。所有者应该是当前用户,还是用户可以选择所有者?谢谢Joni的清晰解释。你太棒了!欢迎来到Stackoverflow。首先,请花时间正确格式化代码。它使它更具可读性。其次,不必为整个应用程序提供代码——只需提供与问题相关的部分就足够了,谢谢crafter,我会记住这一点。