2016-04-15 18 views
2

私はselect2 jquery pluginとlaravelフォームモデルバインディングを使用してサーバーからデータをレンダリングしています。 他のすべては正常に動作しますが、選択されたオプションとして投稿に添付されたタグはレンダリングされません。選択2は選択されたオプションを表示しません。 (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)' 
     }; 
    } 
}); 

そして、これはArticleモデルに

getTagListAtrribute機能です//これは

public function getTagListAttribute(){ 
     return $this->tags->lists('post_id')->all(); 
    } 

getTagListAttribute関数であり、私はこのようなコントローラから編集フォームをロードします。

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

記事に関連付けられているタグをt彼はページを読み込み、私はできなかった。だから私は助けが必要です。この

{!! Form::select('tag_list', $tags, $selected, ['id'=>'tag_list', 'name'=>'tag_list[]','class'=>'form-control','multiple']) !!} 

+0

これはわかりにくいかもしれませんが、選択した値はどこで設定していますか? – apokryfos

+0

フォームモデルバインディングは、私が知っている限り、nullを使用するときにそれを処理する必要があります。 – user2906838

+0

コードスニペットに 'Form :: model'コードがあると視覚的に役立つでしょう。 – apokryfos

答えて

0

セット選択フォームタグIDが第三の配列(選択$)として選択することに渡します。だから、 、

$tags = ['1'=>'one', '2'=>'Two', '3'=>'Three'] 

もし、あなたがワンと選択した3つは、第三パラメータとして選択フォームへの配列として、これらのIDを渡したいです。

so、$ selected = [1,3];

+1

コントローラから選択した値が必要です。そのgetTagListAttribute()関数の背後にある基本的な理由は、特定のpost_idを持つ関連タグを取得することです。 – user2906838

3

質問にはlaravel-5.1というタグが付けられています。 listsメソッドにいくつかの変更が加えられました。

Laravel 5.0。* listsメソッドで渡したkeysおよび/またはvaluesの単純な配列が返されました。 More info here

Laravel 5.1。*では、Collectionオブジェクトを返します。 More Info - Just the code documentation

だから、あなたが探している解決策は次のとおりです。

コントローラで

、次の操作を行います。

$tags = DB::table('tags')->lists('name','tag_id')->toArray(); 

またはVIEWファイルで

、この操作を行います。

{!! Form::select('tag_list[]', $tags->toArray(), null,['id'=>'tag_list', 'class'=>'form-control','multiple']) !!} 

をとそれはあなたのためのトリックを行う必要があります。

EDIT 1:

getTagsListAttribute()からall()方法を削除します。それはまったく必要ではありません。

なぜあなたはDBテーブルを照会するファサードtagsテーブルを照会しますか?既に関係を確立しているので、SQL Statementsを不必要に実行しています。できるだけそれを避けてください。

あなたは、単にこれを行うことによって、それを取得する必要があります。

$tags = $article->tags; 

EDIT 2:

はあなたがtagsテーブルにtag_id列を持っていることを確認していますか?私はそれを疑います。私は誤植でなければならないと思う。間違って、idの代わりにtag_idをタイプしていなければならない。確認のためにそれを確認してください。

これがあなたを助けてくれることを願っています。ハッピーコーディング。乾杯。

+0

私はあなたの答えをありがとう、はい私はtag_idを持っている、私は一般的に複数のIDの混乱を避けるためにこのような大会を使用しています。それがトリックをするかどうか、私にチェックさせてください。 $ article-> tagsタグは関連するタグだけを取得しますが、ここではすべてのタグをビューに渡します。だから私はDB ::クエリを使用しています。 – user2906838

+0

私はlaravelバージョン5.1.23を使用しています。$ tags変数でtoArray()を実行すると、Non-Objectのメンバー関数toArray()を呼び出します。私はこれがエラーではないはずだと思います。どんな助け? – user2906838

関連する問題