2016-05-19 6 views
0

タグをリストするLaravelアプリケーションにメニューがあります。私は、より多くのタグを追加してその順序を変更できるようにしたいが、各タグの基礎となるデータベースIDには影響したくない。それは私がすでにそれらに関連しているデータを破壊するためです。データベースIDに影響を与えずにメニュー項目を並べ替える

データベース::だから私は、私はそうのような「display_order」と呼ばれる私のデータベースに余分な列を追加すると思っ

Schema::create('tags', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->integer('display_order'); 
      $table->string('name'); 
      $table->timestamps(); 
}); 

今私は、ユーザーがdisplay_orderフィールドの値を変更できるようにビューを作成したいです。

コントローラー:

public function showTagsOrder() 
{ 
    $tags = Tag::all()->sortBy('display_order'); 
    return view('menu.tags', compact('tags')); 
} 

ルート:

Route::get('/menu/tags', ['as' => 'menu_tags', 'uses' => '[email protected]']); 

ビュー:

当初、私は、各タグとそのdisplay_orderを印刷し、ユーザーがテキストフィールドに値を更新することを可能にするページを表示します
{!! Form::open(['action' => '[email protected]']) !!} 
      @foreach($tags->chunk(18) as $chunk) 
       <div class="col"> 
        @foreach($chunk as $tag) 
         <p><label>{!! $tag->name !!}</label><input type="text" name="tag_array[{!! $tag->id !!}]" value="{!! $tag->display_order !!}" class="numeric" /> 
        @endforeach 
       </div> 
      @endforeach 
     <p>{!! Form::submit('Submit') !!} 
{!! Form::close() !!} 

フォームが送信されると、私のコントロールに次の機能がありますr:

public function updateTagsOrder(TagsMenuRequest $request) 
{ 

     $i = 1; 
     foreach($request->tag_array as $tag_value) 
     { 
      $tag = new Tag; 
      $tag = Tag::find($i); 
      $tag->display_order = $tag_value; 
      $tag->save(); 
      $i++; 
     } 
     flash()->overlay('The order of tags in the menu has been udpated!', 'Congratulations'); 
     return redirect('/'); 
} 

これは機能しません。どのように私はこれを書き換えるので、私は各タグにdisplay_orderの正しい値を割り当てました。私はあなたの助けに非常に感謝しています。

答えて

1
foreach($request->tag_array as $tag_id => $tag_value) 
    { 
     $tag = Tag::find($tag_id); 
     $tag->display_order = $tag_value; 
     $tag->save(); 
    } 
+0

素晴らしい。ご協力いただきありがとうございます :) – Magearlik

関連する問題