我使用select2 jquery插件,并使用laravel表单模型绑定来呈现服务器中的数据。 虽然其他一切正常,但它并没有将已附加到帖子的标签呈现为选定选项。
必须有一些我不知道的东西,这是我的观点。
<div class="form-group">
{!! Form::label('tag_list','Tags:') !!}
{!! Form::select('tag_list[]', $tags,null,['id'=>'tag_list', 'class'=>'form-control','multiple']) !!}
</div>
// This is the select 2 script
$('#tag_list').select2({
'placeholder':'Choose Tags',
tags:true,
tokenSeparators:[",", " "],
createTag:function(newTag){
return{
id:'new:' + newTag.term,
text:newTag.term + '(new)'
};
}
});
这是文章模型中的getTagListAtrribute函数
//这是getTagListAttribute函数
public function getTagListAttribute(){
return $this->tags->lists('post_id')->all();
}
我从控制器加载编辑表单,如下所示:
public function article_edit($slug){
// fetch the articles.
//$article = DB::table('articles')->where('slug',$slug)->first();
$article = Article::where('slug',$slug)->first();
/*echo '<pre>';
print_r($article->title);
die();*/
$tags = DB::table('tags')->lists('name','tag_id');
$categories=DB::table('categories')->lists('category_name','category_id');
return view('admin.pages.edit', compact('article','tags','categories'));
}
我只是希望在页面加载时选择与文章相关联的标签,而这是我无法使用的标签。所以我需要帮助。
答案 0 :(得分:3)
好吧,因为您已将问题标记为laravel-5.1
。对lists
方法进行了一些更改。
在Laravel 5.0。*中,它只返回您在keys
方法中传递的values
和/或lists
的简单数组。 More info here
在Laravel 5.1。*中,它返回一个Collection对象。 More Info - Just the code documentation
所以,您正在寻找的解决方案是:
在控制器中,执行以下操作:
$tags = DB::table('tags')->lists('name','tag_id')->toArray();
或者在视图文件中,执行以下操作:
{!! Form::select('tag_list[]', $tags->toArray(), null,['id'=>'tag_list', 'class'=>'form-control','multiple']) !!}
这应该可以帮到你。
编辑1:
从all()
移除getTagsListAttribute()
方法。这根本不需要。
为什么使用DB
Facade查询tags
表?由于您已经建立了关系,因此您不必要地执行SQL Statements
。尽量避免这样做。
你应该通过简单地做到这一点:
$tags = $article->tags;
编辑2:
您确定tag_id
表中有tags
列吗?我不信。我想这肯定是一个错字。错误的是,你必须键入tag_id
而不是id
。交叉验证确认。
希望这会帮助你。快乐的编码。欢呼声。
答案 1 :(得分:0)
像这样设置选择表格标签
{!! Form::select('tag_list', $tags, $selected, ['id'=>'tag_list', 'name'=>'tag_list[]','class'=>'form-control','multiple']) !!}
将要选择的ID传递给第三个($ selected)数组。 所以,如果
$tags = ['1'=>'one', '2'=>'Two', '3'=>'Three']
并且您希望选择One和Three,将这些ID作为数组传递给表单select作为第三个参数。
所以,$ selected = [1,3];