今天在使用yii实现一个超级简单的blog功能,然后在评论之后保存,再返回此页面的时候,出现了错误,最后再出来是填充的问题
这里使用了$blog_attributes想把前台获得的blog_id填充进去$blog里面,但是出错了,但是$comment却能够填充成功:
if(isset($_POST['Blog_comment']) && isset($_POST['Blog_main'])){
$blog->attributes = $_POST['Blog_main'];
$comment->attributes = $_POST['Blog_comment'];
$comment->blog_id = $blog->blog_id;
$comment->save();
$blog = $blog->showBlog($blog->blog_id);
$this->render("showBlog",array("blog"=>$blog,"comment"=>$comment));
}else{
throw new CHttpException(500,"comment fail");
}
然后在帮助下使用
echo '<pre>';print_r($_POST);var_dump($_POST['Blog_main']);exit();
输出:
Array ( [Blog_main] => Array ( [blog_id] => 1 ) [Blog_comment] => Array ( [comm_content] => qqq ) )
array 'blog_id' => string '1' (length=1)这就证明了值是传过来的,是填充的时候出来问题,后来把blog_main和blog_commnet两个model进行比较,发现blog_main里面的rules没有required这边的东西,加上数据库表not null字段的required之后,填充就成功了。不知道为什么会没有,一般gii生成的都是会把not null约束的弄成required的。最后我发现,要用CActiveRecord自动填充,必须把主键字段弄成在model的rules()里面的required才行,这是为什么呢?有没有大神回答?