您好我正在使用CRUD界面更新活动。
事件类型号 一个事件属于许多组织者
class Event extends Model
{
public function organizers()
{
return $this->belongsToMany('App\Organizer')->withTimestamps();
}
}
组织者类型号
class Organizer extends Model
{
public function event()
{
return $this->belongsToMany('App\Event')->withTimestamps();
}
}
活动控制器 我发送活动及其组织者
public function edit($id)
{
$event = Event::with(['organizers'])->findOrFail($id);
return view('event.edit', ['event' => $event]);
}
event.edit view
<? $organizers = DB::table('organizers')->lists('name', 'id'); ?>
{!! Form::model($event, [
'method' => 'PATCH',
'route' => ['eventUpdate', $event->id]
]) !!}
<div id="organizer_id-group" class="form-group">
{{Form::select('organizer[id]', $organizers, null,['class'=>'form-control'])}}
</div>
{!! Form::submit('Update', ['class' => 'btn btn-primary']) !!}
{!! Form::close() !!}
目前我看到整个组织者列表虽然不错但是默认值,或者所选择的组织者与链接到事件的组织者不对应。
我试过
<div id="organizer_id-group" class="form-group">
@foreach($event->organizers as $key =>$organizer)
{{Form::select($organizer->id, $organizers, null,['class'=>'form-control'])}}
@endforeach
</div>
但即使$ organizer-&gt; id = 2
,所选的组织者也始终是第一个欢迎任何帮助。谢谢
答案 0 :(得分:1)
使用Form::model
时,可以更轻松地使用数据库中属性的名称。
如果你有
{{Form::select('organizer[id]', $organizers, null,['class'=>'form-control'])}}
然后,如果表单的值存在,则表单的值将设置为$event->organizer->id
。
同样来自您的用例,它看起来像一个组织者属于一个事件。您不显示组织者模型,但在事件模型中定义了多对多关系。这意味着您拥有$event->organizers
。
根据可用信息,您可能希望将关系更改为
return $this->belongsTo('App\Organizer');
修订/更新(在附加信息之后)
现在很清楚,您确实在使用多对多集合。我还没有设法使用Form模型绑定来使用belongsToMany集合,因此您需要设置第3个参数来物理定义需要选择的组织器。
我所知道的最优雅的方法是在Event
对象上为事件管理器ID定义一个访问器。这样,您可以使用old
调用验证错误,然后定义默认值,这是初始编辑的值。
请注意,我们在表单中使用了一个数组来表示多个值。
{{Form::select('organizers[]', $organizers, old('organizers', $event->organizers_ids), ['class' => 'form-control', 'multiple'])}}
然后在模型中添加访问者以返回ID。
public function getOrganizersIdsAttribute()
{
return $this->organizers->lists('id')->all();
}
答案 1 :(得分:0)
这是我需要做的才能让它发挥作用
<div id="organizer_id-group" class="form-group">
{{Form::select('organizers[]', $organizers, $event->organizers->lists('id')->all(),['class'=>'form-control', 'multiple'])}}
<span class="help-block"></span>
</div>
要默认选择,您必须更改第三个参数(https://laravelcollective.com/docs/5.0/html#opening-a-form)