产品列表在编辑时不可见,在laravel 5.1中使用表单模型绑定


Products list not seen while editing, using form model binding in laravel 5.1

在我的电子商务项目中,我有产品和旋转木马模型。

Product.php

<?php
namespace App;
use Illuminate'Database'Eloquent'Model;
use Illuminate'Database'Eloquent'SoftDeletes;
class Product extends Model
{
    use SoftDeletes;
    protected $dates = ['deleted_at'];
    protected $fillable = [
        'code', 'name', 'description', 'special_note', 'sort', 'display', 'weight', 'enquiry'
    ];

    public function carousels()
    {
        return $this->belongsToMany('App'Carousel')->withTimestamps();
    }
}

Carousel.php

<?php
namespace App;
use Illuminate'Database'Eloquent'Model;
use Illuminate'Database'Eloquent'SoftDeletes;
class Carousel extends Model
{
    use SoftDeletes;
    protected $dates = ['deleted_at'];
    protected $fillable = ['name', 'display', 'sort'];
    public function products()
    {
        return $this->belongsToMany('App'Product')->withTimestamps();
    }
    public function getProductListAttribute()
    {
        return $this->products->lists('id');
    }
}

这是控制器:

public function create()
{
    $products = Product::lists('name', 'id');
    return view('admin.carousels.create', compact('products'));
}
public function store(Request $request)
{
    $carousel = Carousel::create($request->all());
    $carousel->products()->attach($request->input('product_list'));
    return redirect()->back();
}
public function edit($id)
{
    $carousel = Carousel::findOrFail($id);
    $products = Product::lists('name', 'id');
    return view('admin.carousels.edit', compact('carousel', 'products'));
}
public function update(Request $request)
{
    dd($request->all());
}

carousel表单:

<div class="col-md-4 col-sm-4">
    <div class="form-group">
        {!! Form::label('name', 'Name:') !!}
        {!! Form::text('name', null, ['class' => 'form-control input-sm', 'id' => 'name']) !!}
    </div>
</div>
<div class="col-md-4 col-sm-4">
    <div class="form-group">
        {!! Form::label('sort', 'Sort:') !!}
        {!! Form::text('sort', null, ['class' => 'form-control input-sm', 'id' => 'sort']) !!}
    </div>
</div>
<div class="col-md-4 col-sm-4">
    <div class="form-group">
        {!! Form::label('display', 'Display:') !!}
        {!! Form::select('display', ['Disabled' => 'Disabled', 'Enabled' => 'Enabled'], null, ['class' => 'form-control input-sm', 'id' => 'display']) !!}
    </div>
</div>
<div class="col-md-12 col-sm-12">
    <div class="form-group">
        {!! Form::label('product_list', 'Products:') !!}
        {!! Form::select('product_list[]', $products, null, ['class' => 'form-control input-sm', 'multiple']) !!}
    </div>
</div>
<div class="col-md-12 col-sm-12">
    <div class="form-group">
        {!! Form::submit($submitButtonText, ['class' => 'btn btn-primary btn-block m_top_15', 'id' => $submitButtonId]) !!}
    </div>
</div>

现在,问题是,当我使用表单模型绑定来编辑carousel表单时,选择框中没有显示任何产品,尽管我可以看到要从中选择的所有产品。对于特定的旋转木马,所选产品是看不到的。

我犯了什么错误?请帮帮我。

谢谢。

p。S:我使用的是Laravel 5.1,第一次遇到这个问题。我以前在Laravel 5中这样做过,没有任何问题。

这可能与5.1中如何处理lists()有关。从升级指南-

list Method

lists方法现在返回一个Collection实例,而不是普通的用于Eloquent查询的数组。如果你想转换集合转换为普通数组,使用all方法:

用户:列表(id) -> ();请注意Query Builder列出方法仍然返回一个数组。