我陷入了一些我认为是由于我对多对多关系的经验不足的问题。
在我的应用程序中,我将兴趣映射到具有多对多的产品。我希望创建以下场景,其中完整的兴趣列表列在带有复选框的特定产品下。对于提交表单时选中的每个复选框,都会在 InterestProductAssignment 表中添加一行。
在我的产品控制器中,我调用了完整的兴趣列表-
$interests = Interest::model()->findAll();
实际上,我并没有比这更进一步,因为我的思绪很纠结,想知道从哪里开始。到目前为止,我尝试的是构建一个 InterestProductAssignment 对象数组来匹配我上面返回的兴趣数组。我已经尝试将它传递给视图并构建表单,但是我试图将两者匹配起来让自己相当困惑,我不敢相信我正在正确使用 Yii,因为它很乱。
是否有人能够概述此问题的解决方案,使我能够针对每个兴趣添加一个复选框,以便在提交时在产品和兴趣之间添加链接?我很想看看你在控制器和视图中写了什么。
澄清一下,这个页面只是一个产品的主题。
延期
对于我遇到的补充问题,我发布了我得到的代码,一旦我们发现错误,这也可以帮助其他人实现类似的事情。
我在我的产品控制器中的关系是这样的——
'interests'=>array(self::MANY_MANY, 'Interest', 'interest_product_assignment(interest_id, product_id)')
控制器
public function actionUpdate($id)
{
// loadModel as been adapted to be called "->with('interests')"
$model=$this->loadModel($id);
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Product']))
{
$model->attributes=$_POST['Product'];
if($model->save())
foreach($_POST['ProductInterest'] as $i => $interest_id){
$this_interest = new InterestProductAssignment;
$this_interest->product_id = $model->id;
$this_interest->interest_id = $interest_id;
$this_interest->save();
}
$this->redirect(array('view','id'=>$model->id));
}
$this->render('update',array(
'model'=>$model,
));
}
视图_form.php的相关部分
<div class="row">
<?php echo CHtml::checkBoxList('ProductInterest', CHtml::listData($model->interests, 'interest_id', true), CHtml::listData(Interest::model()->findAll(), 'id', 'interest'));?>
</div>
问题是 checkBoxList 中的第二个字段似乎没有正确填写已选中的复选框。我怀疑这的根本原因可能是一个愚蠢的错误。我无法发现它,而且我对 checkBoxList 还不够熟悉。
提前致谢。