Yii - 一对多更新表格

时间:2014-03-05 19:30:10

标签: php loops yii one-to-many models

我有一对多的关系,电影可以有很多youtubeclips ..我设法创建模型并在更新表单中显示电影数据。我现在需要能够创建一个类型的循环来将我的许多关系数据放入表单中。但似乎无法弄清楚如何做到这一点..这就是我到目前为止所做的..

MovieController -

public function actionUpdate($id)
{


    $model=$this->loadModel($id);
    $modelYoutubeVideo=$this->loadYoutubeVideoModel($id);
    $modelTwitterFeed=$this->loadTwitterModel($id);

    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'=>$modelYoutubeVideo,
        'modelTwitterFeed'=> $modelTwitterFeed
    ));
}

更新表格 -

<div class="row clone">
    <?php echo $form->labelEx($modelYoutubeVideo,'embed_code'); ?>
    <?php echo $form->textField($modelYoutubeVideo,'embed_code[]',array('size'=>50,'maxlength'=>50)); ?>
    <?php echo $form->error($modelYoutubeVideo,'embed_code'); ?>

    <?php echo $form->labelEx($modelYoutubeVideo,'description'); ?>
    <?php echo $form->textField($modelYoutubeVideo,'description[]',array('size'=>50,'maxlength'=>250)); ?>
    <?php echo $form->error($modelYoutubeVideo,'description'); ?>
</div>
<?php
    $this->widget('ext.widgets.reCopy.ReCopyWidget', array(
        'targetClass'=>'clone',
    ));
?>

需要创建一个循环,从多个关系表中输出我的数据 -

    <?php
    for ($i = 0; $i < count($modelYoutubeVideo); ++$i) {

        ($modelYoutubeVideo->embed_code[i]);
        ($modelYoutubeVideo->embed_code[i]);

    }
?>

电影关系 -

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'),
    );
}

1 个答案:

答案 0 :(得分:1)

在你的actionUpdate中你可以使用像这样的使用关系

$model=$this->loadModel($id);
$youTubevideos=$model->YoutubeVideo;

此处YouTubeVideo与您的模型中的关系名称相同。它将为您提供与特定电影相关的所有youtubeVideo活动记录。现在将此数组传递给您的视图,如

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

然后在您的视图中使用foreach循环显示模型的每个值,如

foreach($youTubeVideos as $video)
{
echo $video->name;
}

在上面的echo语句中,你实际上可以回复任何像CdetailView小部件或你想要重复的东西。