我使用下拉菜单选择网站为:
{{ Form::select('site', $sites, null, ['class' => 'form-control', 'placeholder' => 'Select a Site']) }}
{{ Form::label('site','site*') }}
我将所选站点作为site_id
存储在数据库中。由于这会从列表中返回所选项目的索引,因此如果选择了第一项,则site_id
将在数据库中存储为0。
这里的问题是,site_id
是我的数据库中的foreign_key,这会导致错误,同时将它与column:id
表的sites
匹配。由laravel迁移脚手架产生的id
柱从1开始,site_id
返回的Form::select
从0开始。
无论如何,从Form::select
返回的索引将从1开始?
或者还有其他方法可以解决问题吗?
当您从数据库获取站点时,请保留原始ID以解决问题:
$sites = Site::pluck('name', 'id');
此代码将生成具有实际ID的站点名称列表:
[1 => 'Site name 1', 2 => 'Site name 2']
你有很多解决方案
首先,只需验证验证,自控制器以来,站点不能为0
use Illuminate\Validation\Rule;
/** ... */
$this->validate($request, [
'site'=>['required',Rule::notIn([0])]
])
您还可以查看保存位置的站点模型:
DB::transaction(function() use($request){
/** mapping of site attribute */
if($site->save())
{
}
}
您也可以通过JavaScript检查客户端
{{ Form::select('site', $sites, null, ['id'=>'sites', 'class' => 'form-control', 'placeholder' => 'Select a Site']) }}
{{ Form::label('site','site*') }}
$("form input['type=submit']").click(function(e){
e.preventDefault();
if($('#sites').val() == 0)
{
alert('Please, select a site');
return;
}else{
$(this).submit();
}
})
如果你想插入没有id的名字你可以使用$ sites = Site :: pluck('name','name');我希望这会奏效。