我知道这是一个受到重创的话题但是,我是一个完整的新手,我一直试图解决这个问题很长一段时间但现在还没有得到它。
我有两个表:帖子和标签
现在,在这个场景中定义的关系是很多的。因此它有一个名为'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扩展程序,但我无法让它运行。我真的很无能,我尝试了很多东西但是却无法在赋值表中插入值。
如果我要使用扩展名,那么有人可以在这种情况下描述这样做的方法吗?
有人可以指导我哪里出错了,我需要做什么? 如果这个问题真的很旧,我很抱歉。但我真的被困在这里。
问候,
答案 0 :(得分:1)
我将展示我是如何做到这一点的。也许它不是最好的方式,但仍然有效。
我使用afterSave
函数。在您的情况下,您将希望在帖子模型中使用它。
protected function afterSave()
{
parent::afterSave();
$relation_table=new TablehasPosts;//your relation model here
$relation_table->tbl_post_id=$this->id;//post id here to relation model
$output=array();
foreach($_POST[tag_id] as $tag_id)//depends on what you have to define tags //id's in your form (checkboxlist, multiselect etc...)
{
array_push($output,$tag_id);//push your id's to some array
}
$relation_table->tbl_tags_id=serialize($output);//in your way to store this
}
这是我如何处理它的一个例子。我试着写近你的模特。 希望这会帮助你至少看到这条线。