选择2不显示所选选项。 (Laravel)

时间:2016-04-15 10:58:10

标签: php jquery laravel laravel-5.1 select2

我使用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'));
    }

我只是希望在页面加载时选择与文章相关联的标签,而这是我无法使用的标签。所以我需要帮助。

2 个答案:

答案 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];