我正在使用 select2 jquery 插件和 laravel 表单模型绑定(bind)来渲染来自服务器的数据。 虽然其他一切工作正常,但它不会将已附加到帖子的标签呈现为选定选项。
一定有什么我不知道的,这是我的看法。
<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();
}
我从 Controller 加载编辑表单,如下所示:
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'));
}
我只想在页面加载时选择与文章关联的标签,但我无法做到这一点。所以我需要帮助。
最佳答案
好吧,既然您已将问题标记为 laravel-5.1
。 lists
方法进行了一些更改。
在 Laravel 5.0.* 中,它仅返回您在 lists
方法中传递的 keys
和/或 values
的普通数组。 More info here
在 Laravel 5.1.* 中,它返回一个 Collection 对象。 More Info - Just the code documentation
因此,您正在寻找的解决方案是:
在 Controller 中,执行以下操作:
$tags = DB::table('tags')->lists('name','tag_id')->toArray();
或者在 View 文件中执行以下操作:
{!! Form::select('tag_list[]', $tags->toArray(), null,['id'=>'tag_list', 'class'=>'form-control','multiple']) !!}
这应该对你有用。
编辑1:
从 getTagsListAttribute()
中删除 all()
方法。这根本不是必需的。
为什么使用DB
Facade 来查询tags
表?由于您已经建立了关系,因此无需执行 SQL 语句
。尽可能避免这种情况。
您应该通过简单地执行以下操作来获得它:
$tags = $article->tags;
编辑2:
您确定 tags
表中有 tag_id
列吗?我不信。我想这一定是一个拼写错误。您一定是错误地输入了 tag_id
而不是 id
。交叉验证以确认。
希望这对您有帮助。快乐编码。干杯。
关于php - 选择 2 不显示所选选项。 (拉拉维尔),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36645323/