我需要一些帮助。
我有这些表:用户,购买和编解码器。我有多对多的关系:购买,编解码器,buy_codec
表格
class UserBuyController extends Controller
{
public function create($userId)
{
$codecs = Codec::lists('name', 'id');
$usr = User::findOrFail($userId);
return view('buy.create', compact('usr', 'codecs'));
}
public function store($userId, Request $request)
{
$codecs = $request->input('codecs');
$usr = User::findOrFail($userId)->buy()->create($request->except('codecs'));
$usr->codec()->sync($codecs);
return redirect('user/'.$userId.'/buy');
}
public function edit($userId, $id)
{
$codecs = Codec::lists('name', 'id');
$buy = User::findOrFail($userId)->buy()->findOrFail($id);
return view('buy.edit', compact('buy', 'codecs'));
}
}
这是我的控制者:
{!! Form::open(['method'=>'POST', 'action'=>['UserBuyController@store', $usr->id]]) !!}
<div class="form-group">
{!! Form::label('name', 'Name:') !!}
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-font"></i></span>
{!! Form::text('name', null, ['class'=>'form-control']) !!}
</div>
</div>
<div class="form-group">
{!! Form::label('codecs', 'Outbound Codecs:') !!}
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-language"></i></span>
{!! Form::select('codecs[]', $codecs, null, ['class'=>'form-control', 'multiple'=>true]) !!}
</div>
</div>
{!! Form::submit('Submit', ['class'=>'btn btn-info']) !!}
{!! Form::close() !!}
创建表单
{!! Form::model($buy,['url'=>url('user/'.$buy->user->id.'/buy/'.$buy->id),'method'=>'patch']) !!}
<div class="form-group">
{!! Form::label('name', 'Name:') !!}
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-font"></i></span>
{!! Form::text('name', null, ['class'=>'form-control']) !!}
</div>
</div>
<div class="form-group">
{!! Form::label('codecs', 'Outbound Codecs:') !!}
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-language"></i></span>
{!! Form::select('codecs[]', $codecs, null, ['class'=>'form-control', 'multiple'=>true]) !!}
</div>
</div>
{!! Form::submit('Update', ['class'=>'btn btn-info']) !!}
{!! Form::close() !!}
这是编辑表单
class Buy extends Model
{
protected $guarded = ['id'];
public function codec() {
return $this->belongsToMany('App\Codec');
}
public function user() {
return $this->belongsTo('App\User');
}
}
class Codec extends Model
{
protected $guarded = ['id'];
public function buy() {
return $this->belongsToMany('App\Buy');
}
}
class User extends Authenticatable
{
public function buy() {
return $this->hasMany('App\Buy');
}
}
模型绑定不起作用
出了点问题,但我不知道是什么。
这是我的数据透视表。我有2个与 buy_id 3
相关联的编解码器这是我的编辑页面。
没有选择任何内容。
更新
模型
onItemSelected
答案 0 :(得分:1)
一种解决方案是为编解码器id创建一个访问器,并将其与Form::select()
一起使用:
在Buy
模型中添加以下访问者:
public function getCodecListAttribute()
{
return $this->codecs->pluck('id')->toArray();
}
然后将您选择块更改为:
<div class="form-group">
{!! Form::label('codec_list', 'Outbound Codecs:') !!}
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-language"></i></span>
{!! Form::select('codec_list[]', $codecs, null, ['class'=>'form-control', 'multiple'=>true]) !!}
</div>
</div>
这意味着当您尝试从请求中获取值时,您必须使用codec_list
而不是codecs
。
希望这有帮助!
答案 1 :(得分:1)
:{!! Form::select('codecs[]', $codecs, null, ['class'=>'form-control', 'multiple'=>true]) !!}
默认选择的值设置为null
。您应该在此处设置相关编解码器的ID列表。
希望这有帮助。