我正在尝试使用laravel创建一个简单的博客。
不幸的是,我迷失了试图通过雄辩的多对多关系将标签附加到新帖子。
任何帮助都会被理解为:
型号:
//post.php
public function blogTags(){
return $this->belongsToMany('BlogTag', 'blogTag_post', 'post_id', 'blogTag_id');
}
//BlogTag.php
public function posts(){
return $this->belongsToMany('Post', 'blogTag_post', 'blogTag_id', 'post_id');
}
从视图标记html(从get方法传入$categories
):
<h3> Tags </h3>
<select multiple class="form-control" id="tag">
@foreach ($categories as $category)
<option value="{{$category->id}}">{{$category->name}}</option>
@endforeach
</select>
</div>
我的控制器中的商店功能
$post = new Post();
$post->post_title = Input::get('post_title');
$post->month = Input::get('month');
$post->date = Input::get('date');
$post->post_body = Input::get('post_body');
$post->picture_path = $destinationPath ."/". $filename;
$post->post_author = $author;
$post->save();
foreach (Input::get('tag') as $tagId) {
// look up the existing Tag by ID
$tag = BlogTag::find($tagId);
// save the Tag on the Post
$post->blogTags()->save($tag);
}
我想我已经在圈子里谈过自己了。
具体来说,我的问题是:
$post->blogTags()->save($tag);
吗? TIA
答案 0 :(得分:1)
问题是视图中的选择输入。
所以我改变了这个:
<select multiple class="form-control" id="tag">
@foreach ($categories as $category)
<option value="{{$category->id}}">{{$category->name}}</option>
@endforeach
</select>
到
{{Form::select('tag[]', $categories, null, array('multiple' => true));}}
多对多关系数据现在正保存在数据库中。
答案 1 :(得分:1)
您第一次尝试时遇到的问题并不是您没有使用Laravel Form辅助方法,而是您没有将多个数据作为数组传递,而且select元素缺少name属性。通过包含名称,您将获得一个值,但只有一个。使用数组表示法(foo [])允许多个值。
如果您想在html中执行以下操作,也可以使用以下内容:
<select multiple name="tag[]" class="form-control" id="tag">
@foreach ($categories as $category)
<option value="{{$category->id}}">{{$category->name}}</option>
@endforeach
</select>
在旁注中,在您尝试将其保存到帖子之前,我还会进行有条件的检查是否存在$ tag。