我知道这是一个饱受摧残的话题,但是,我是一个完全的新手,我一直在努力解决这个问题,但一直未能解决。
我有两个表:帖子和标签
现在这个场景中定义的关系是多对多的。因此它有一个名为“tbl_tags_has_tbl_post”的表。这是存储关系之间的分配。
现在我在我的“post”模型中获取“tag”模型的数据,并且我已经能够从 Post 表单中保存标签的数据。但是,现在我无法在“tbl_tags_has_tbl_post”表中分配值。
我什至尝试过使用 CAdvancedArRelationship 扩展和插件,但仍然无济于事。
这是我的数据库结构图形:
这是我在 Post 表中定义的关系:
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', 'tbl_post_id'),
'author' => array(self::BELONGS_TO, 'User', 'tbl_user_id'),
'tagsRelation' => array(self::MANY_MANY, 'Tags', 'tbl_tags_has_tbl_post(tbl_post_id, tbl_tags_id)'),
'commentCount' => array(self::STAT,'Comment','tbl_post_id'), // this shall count the number of comments present
);
}
这是我在我的标签模型中定义的关系:
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(
'posts' => array(self::MANY_MANY, 'Post', 'tbl_tags_has_tbl_post(tbl_tags_id, tbl_post_id)'),
);
}
这是我的 PostController 类中的 actionCreate() 方法:
public function actionCreate()
{
$model=new Post;
$tags = new Tags; // This is for initializing the second model
$model->tbl_user_id = Yii::app()->user->id;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Post'],$_POST['Tags']))
{
$model->attributes=$_POST['Post'];
$tags->attributes = $_POST['Tags'];
$valid=$model->validate();
$valid=$tags->validate() && $valid;
if($valid)
{
// use false parameter to disable validation
$tags->save(false);
// ...redirect to another page
//
}
if($model->save()){
$this->redirect(array('view','id'=>$model->id));
}
}
$this->render('create',array(
'model'=>$model,
'tags' =>$tags,
));
}
所以现在,我想要做的是,每当创建一个带有少量标签的帖子时,分配表也应该自动填充,例如:
tbl_post_id tbl_tags_id 1 1 2 1 2 2
类似的东西。
我什至也尝试过使用 CAdvancedAr 扩展,但我无法让它运行。我真的一无所知,我尝试了很多东西,但无法将值插入分配表中。
如果我要使用扩展,任何人都可以描述在这种情况下这样做的方法吗?
任何人都可以指导我哪里出错了,我需要做什么?如果这个问题真的很老,我很抱歉。但我真的被困在这里。
问候,