我有一個不能加載,因爲它無法找到模型的更新表格..我有三個表格..電影,YoutubeVideos,Twitter。電影與其他表格有一對多的關係..我希望能夠使用當前電影ID創建更新表單並與YouTube視頻和Twitter中的數據相匹配。並顯示結果..Yii框架更新頁面添加更多的模型來查看
這是我有這麼
public function actionUpdate($id)
{
$model=$this->loadModel($id);
// $modelYoutubeVideo = YoutubeVideo::model()->findByAttributes(array('movie_id'=>$id));
// $modelTwitterFeed = TwitterFeed::model()->findByAttributes(array('movie_id'=>$id));
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Movie']))
{
$model->attributes=$_POST['Movie'];
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
$this->render('update',array(
'model'=>$model,
'modelYoutubeVideo'=> YoutubeVideo::model()->findByAttributes(array('movie_id'=>$model->id)),
'modelTwitterFeed'=> TwitterFeed::model()->findByAttributes(array('movie_id'=>$id))
));
}
電影模式 -
<?php
/** * 這對錶 「電影」 的模型類。 * *以下是表 '電影' 的可用列: * @property整數的$ id * @屬性字符串$ MOVIE_NAME * @property整數$ studio_id * @property整數$ COUNTRY_ID * @property整數$ movie_rating_id * @property整數$ map_pin_id * @屬性字符串$描述 * @屬性字符串$ title_image * @屬性字符串$ title_trailer_youtube_code * @屬性字符串$ RELEASE_DATE * @屬性字符串$ bg_colour_code * @屬性字符串$ text_colour_code * @property整數$ is_released * @property整數$ is_advanced_booking_allowed * @屬性字符串$ advanced_booking_start_date * @屬性字符串$ advanced_booking_end_date * @屬性字符串$ domain_prefix * @屬性字符串$ facebook_app_id * @屬性字符串$ facebook_app_url * @屬性字符串$ facebook_icon_image_url * @屬性字符串$ facebook_text * @屬性字符串$ twitter_text * @屬性字符串$ booking_share_text * @屬性字符串$ westworld_movie_id * @屬性字符串$ home_tracking_url * @屬性字符串$ shows_tracking_url * *以下是日E,可模型關係: * @property大賽[] $比賽 * @property工作室$工作室 * @property國家$國家 * @property MovieRating $ movieRating * @property MapPin $ mapPin * @property通過twitterfeed [] $ twitterFeeds * @property YoutubeVideo [] $ youtubeVideos / 類電影擴展的CActiveRecord { / * * @返回字符串相關的數據庫表名 */ 公共功能表名(){ 回報 '電影' ; }
/**
* @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('studio_id, country_id, movie_rating_id, map_pin_id, is_released, is_advanced_booking_allowed', 'numerical', 'integerOnly'=>true),
array('movie_name domain_prefix, facebook_app_url, facebook_icon_image_url, home_tracking_url, shows_tracking_url', 'length', 'max'=>255),
array('title_image', 'file','types'=>'jpg, gif, png', 'allowEmpty'=>true, 'on'=>'update'),
array('title_trailer_youtube_code', 'length', 'max'=>50),
array('bg_colour_code, text_colour_code', 'length', 'max'=>8),
array('facebook_app_id', 'length', 'max'=>20),
array('westworld_movie_id', 'length', 'max'=>10),
array('title_image', 'file', 'allowEmpty'=>true),
array('description, release_date, advanced_booking_start_date, advanced_booking_end_date, facebook_text, twitter_text, booking_share_text', 'safe'),
// The following rule is used by search().
// @todo Please remove those attributes that should not be searched.
array('id, movie_name, studio_id, country_id, movie_rating_id, map_pin_id, description, title_trailer_youtube_code, release_date, bg_colour_code, text_colour_code, is_released, is_advanced_booking_allowed, advanced_booking_start_date, advanced_booking_end_date, domain_prefix, facebook_app_id, facebook_app_url, facebook_icon_image_url, facebook_text, twitter_text, booking_share_text, westworld_movie_id, home_tracking_url, shows_tracking_url', '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(
'competitions' => array(self::HAS_MANY, 'Competition', 'movie_id'),
'studio' => array(self::BELONGS_TO, 'Studio', 'studio_id'),
'country' => array(self::BELONGS_TO, 'Country', 'country_id'),
'movieRating' => array(self::BELONGS_TO, 'MovieRating', 'movie_rating_id'),
'mapPin' => array(self::BELONGS_TO, 'MapPin', 'map_pin_id'),
'twitterFeeds' => array(self::HAS_MANY, 'TwitterFeed', 'movie_id'),
'YoutubeVideo' => array(self::HAS_MANY, 'YoutubeVideo', 'movie_id'),
);
}
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels()
{
return array(
'id' => 'ID',
'movie_name' => 'Movie Name',
'studio_id' => 'Studio',
'country_id' => 'Country',
'movie_rating_id' => 'Movie Rating',
'map_pin_id' => 'Map Pin',
'description' => 'Description',
'title_image' => 'Title Image',
'title_trailer_youtube_code' => 'Title Trailer Youtube Code',
'release_date' => 'Release Date',
'bg_colour_code' => 'Bg Colour Code',
'text_colour_code' => 'Text Colour Code',
'is_released' => 'Is Released',
'is_advanced_booking_allowed' => 'Is Advanced Booking Allowed',
'advanced_booking_start_date' => 'Advanced Booking Start Date',
'advanced_booking_end_date' => 'Advanced Booking End Date',
'domain_prefix' => 'Domain Prefix',
'facebook_app_id' => 'Facebook App',
'facebook_app_url' => 'Facebook App Url',
'facebook_icon_image_url' => 'Facebook Icon Image Url',
'facebook_text' => 'Facebook Text',
'twitter_text' => 'Twitter Text',
'booking_share_text' => 'Booking Share Text',
'westworld_movie_id' => 'Westworld Movie',
'home_tracking_url' => 'Home Tracking Url',
'shows_tracking_url' => 'Shows Tracking Url',
);
}
/**
* 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('country_id', Yii::app()->user->getState('country_id'));
$criteria->compare('id',$this->id);
$criteria->compare('movie_name',$this->movie_name,true);
$criteria->compare('studio_id',$this->studio_id);
$criteria->compare('country_id',$this->country_id);
$criteria->compare('movie_rating_id',$this->movie_rating_id);
$criteria->compare('map_pin_id',$this->map_pin_id);
$criteria->compare('description',$this->description,true);
$criteria->compare('title_image',$this->title_image,true);
$criteria->compare('title_trailer_youtube_code',$this->title_trailer_youtube_code,true);
$criteria->compare('release_date',$this->release_date,true);
$criteria->compare('bg_colour_code',$this->bg_colour_code,true);
$criteria->compare('text_colour_code',$this->text_colour_code,true);
$criteria->compare('is_released',$this->is_released);
$criteria->compare('is_advanced_booking_allowed',$this->is_advanced_booking_allowed);
$criteria->compare('advanced_booking_start_date',$this->advanced_booking_start_date,true);
$criteria->compare('advanced_booking_end_date',$this->advanced_booking_end_date,true);
$criteria->compare('domain_prefix',$this->domain_prefix,true);
$criteria->compare('facebook_app_id',$this->facebook_app_id,true);
$criteria->compare('facebook_app_url',$this->facebook_app_url,true);
$criteria->compare('facebook_icon_image_url',$this->facebook_icon_image_url,true);
$criteria->compare('facebook_text',$this->facebook_text,true);
$criteria->compare('twitter_text',$this->twitter_text,true);
$criteria->compare('booking_share_text',$this->booking_share_text,true);
$criteria->compare('westworld_movie_id',$this->westworld_movie_id,true);
$criteria->compare('home_tracking_url',$this->home_tracking_url,true);
$criteria->compare('shows_tracking_url',$this->shows_tracking_url,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 Movie the static model class
*/
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function getYesNoOptions(){
$optionList = array();
$optionList[0] = "No";
$optionList[1] = "Yes";
return $optionList;
}
public function getRatingOptions(){
$ratingList = MovieRating::model()->findAll();
$optionList = CHtml::listData($ratingList, 'id', 'rating_name');
return $optionList;
}
public function getStudioOptions(){
$studioList = Studio::model()->findAll();
$optionList = CHtml::listData($studioList, 'id', 'name');
return $optionList;
}
public function getMapPinOptions(){
$mapPinList = MapPin::model()->findAll();
$optionList = CHtml::listData($mapPinList, 'id', 'pin_colour_code');
return $optionList;
}
}
重試 - 認爲它需要沿着這些線路
public function loadYoutubeVideoModel($id)
{
$criteria=new CDbCriteria;
$criteria->addSearchCondition('movie_id', $id);
$model=YoutubeVideo::model()->findAll($criteria);
if($model===null)
throw new CHttpException(404,'The requested page does not exist.');
return $model;
}
public function loadTwitterModel($id)
{
$criteria=new CDbCriteria;
$criteria->addSearchCondition('movie_id', $id);
$model=TwitterFeed::model()->findAll($criteria);
if($model===null)
throw new CHttpException(404,'The requested page does not exist.');
return $model;
}
「我有一個無法加載的更新表單,因爲它無法找到模型。」它顯示一些錯誤?發佈錯誤和查看代碼 –