我在两个对象Tag
和Post
之间设置了多对多的关系。
现在,我必须在复选框列表中检查发布的标签,如下所示:
//Load all possible tags in the controller
//and send it to view
$allTags = \App\Tag::all();
return view('post.edit')->with('allTags');
在视图中:
@foreach($allTags as $tag)
<input type="checkbox" name="tags[]" value="{{ $tag->id }}"/>
{{ $tag->description }}
@endforeach
现在,当用户重新加载页面时,我必须检查这些复选框。
我的问题是:
这肯定有用,但对我来说似乎 overkill
$relatedTags = [];
foreach($post->tags as $tag){
$relatedTags[]= $tag->id;
}
有没有办法只获取id而不加载所有这些对象?
类似于:$relatedTags = $post->tags()->ids
?
答案 0 :(得分:2)
使用此功能,它只会获取您需要的ID和描述。
$allTags = DB::table('tags')->lists('description', 'id');
答案 1 :(得分:2)
您可以尝试查询结果:
$relatedTagIds = $post->tags()->select('id')->get()->pluck('id')->toArray();
这就是你如何获得清晰的标签ID列表。
答案 2 :(得分:0)
感谢Filip的回答,我找到了另一种可能的解决方案。
$post->tags->pluck('id')->toArray();
我希望有人发现它有用