Laravel - 表单 - 预加载
Laravel - Form - Eager Loading
您好,我正在开发用于更新事件的 CRUD 界面。
活动Class模型一个活动属于多个组织者
class Event extends Model
{
public function organizers()
{
return $this->belongsToMany('App\Organizer')->withTimestamps();
}
}
组织者Class模特
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 查看
<? $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->id = 2
,选定的组织者总是第一个
欢迎任何帮助。谢谢
在使用 Form::model
时,使用数据库中 属性 的名称会更容易。
如果你有
{{Form::select('organizer[id]', $organizers, null,['class'=>'form-control'])}}
然后表单的值将设置为 $event->organizer->id
(如果存在)。
另外,从您的用例来看,组织者似乎属于某个事件。您不显示组织者模型,但在事件模型中定义多对多关系。这意味着您有 $event->organizers
.
根据现有信息,您可能希望将关系更改为
return $this->belongsTo('App\Organizer');
修正/更新(附加信息后)
现在很清楚了,您确实在处理多对多集合。我还没有设法让 Form 模型绑定与 belongsToMany 集合一起使用,因此您需要设置第三个参数来物理定义需要选择的组织者。
据我所知,最优雅的方法是在 Event
对象上为活动组织者 ID 定义一个访问器。通过这种方式,您可以调用 old
来处理验证错误,然后定义默认值以及初始编辑的值。
请注意,在表单中我们为多个值使用数组。
{{Form::select('organizers[]', $organizers, old('organizers', $event->organizers_ids), ['class' => 'form-control', 'multiple'])}}
然后在模型中将访问器添加到 return ID。
public function getOrganizersIdsAttribute()
{
return $this->organizers->lists('id')->all();
}
回答# 根据莱昂的建议更新
这就是我需要做的才能让它发挥作用
<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)
您好,我正在开发用于更新事件的 CRUD 界面。
活动Class模型一个活动属于多个组织者
class Event extends Model
{
public function organizers()
{
return $this->belongsToMany('App\Organizer')->withTimestamps();
}
}
组织者Class模特
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 查看
<? $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->id = 2
,选定的组织者总是第一个欢迎任何帮助。谢谢
在使用 Form::model
时,使用数据库中 属性 的名称会更容易。
如果你有
{{Form::select('organizer[id]', $organizers, null,['class'=>'form-control'])}}
然后表单的值将设置为 $event->organizer->id
(如果存在)。
另外,从您的用例来看,组织者似乎属于某个事件。您不显示组织者模型,但在事件模型中定义多对多关系。这意味着您有 $event->organizers
.
根据现有信息,您可能希望将关系更改为
return $this->belongsTo('App\Organizer');
修正/更新(附加信息后)
现在很清楚了,您确实在处理多对多集合。我还没有设法让 Form 模型绑定与 belongsToMany 集合一起使用,因此您需要设置第三个参数来物理定义需要选择的组织者。
据我所知,最优雅的方法是在 Event
对象上为活动组织者 ID 定义一个访问器。通过这种方式,您可以调用 old
来处理验证错误,然后定义默认值以及初始编辑的值。
请注意,在表单中我们为多个值使用数组。
{{Form::select('organizers[]', $organizers, old('organizers', $event->organizers_ids), ['class' => 'form-control', 'multiple'])}}
然后在模型中将访问器添加到 return ID。
public function getOrganizersIdsAttribute()
{
return $this->organizers->lists('id')->all();
}
回答# 根据莱昂的建议更新
这就是我需要做的才能让它发挥作用
<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)