我的Laravel应用程序中有一个列出标签的菜单。我希望能够添加更多标签并更改其顺序,但我不想影响每个标签的基础数据库ID。因为这会破坏我已经与之关联的任何数据。所以我想我在我的数据库中添加了一个名为' display_order'像这样:
数据库:
Schema::create('tags', function (Blueprint $table) {
$table->increments('id');
$table->integer('display_order');
$table->string('name');
$table->timestamps();
});
现在我想创建一个视图,让用户更改display_order字段的值。最初我展示了一个打印每个标签及其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' => 'MenuOrderController@showTagsOrder']);
查看:
{!! Form::open(['action' => 'MenuOrderController@updateTagsOrder']) !!}
@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() !!}
提交表单后,我的控制器中有以下功能:
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的正确值。我非常感谢你的帮助。
答案 0 :(得分:1)
foreach($request->tag_array as $tag_id => $tag_value)
{
$tag = Tag::find($tag_id);
$tag->display_order = $tag_value;
$tag->save();
}