我是laravel的新手。我使用循环循环工作将一些复选框值保存到数据库,但它只将数组中的最后一个值保存到数据库中。
这是我的表格
<form action="{{url('resortf')}}" method="post" enctype="multipart/form-data">
<input hidden name="h_id" value="{{ $hotel->id}}">
@foreach($facility as $facilities)
<div class="col-md-4">
<img src="{{$facilities->image}}" width="50px" height="50px;">
<label>{{$facilities->name}}</label>
<input type="checkbox" value="{{$facilities->id}}" name="facilities[]">
</div>
@endforeach
<div class="row">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="submit" class="btn btn-success" value="Next">
<input type="reset" class="btn btn-success" value="Reset">
</div>
</form>
形式工作正常; $facilities
和$hotel
从控制器传递。
这是商店功能
public function store(Request $request) {
$resortfacility = new Resortfacility;
$loop = $request->get('facilities');
foreach ($loop as $value){
$resortfacility->h_id = $request->get('h_id');
$resortfacility->f_id = $value;
$resortfacility->save();
}
}
有没有其他方法可以做到这一点?
答案 0 :(得分:2)
出现问题是因为您创建了一个Resortfacility
实例,然后填写其值并保存。问题是,每次在循环中对此对象执行更改时,您都是updating
现有对象,这就是数据库中只有一条记录的原因,也就是循环中的最后一条记录。
尝试在循环中创建一个新的Resortfacility实例,如下所示:
public function store(Request $request) {
$loop = $request->get('facilities');
foreach ($loop as $value){
$resortfacility = new Resortfacility;
$resortfacility->h_id = $request->get('h_id');
$resortfacility->f_id = $value;
$resortfacility->save();
}
}
答案 1 :(得分:-1)
另一个答案是正确的,但批量插入可能会有所帮助,因为在foreach循环中创建新对象将对每条记录进行查询。
public function store(Request $request)
{
$facilities = $request->get('facilities');
$data=array();
foreach($facilities as $facility)
{
$data[] =[
'f_id' => $facility,
'h_id' => $request->get('h_id'),
];
}
}
Resortfacility::insert($data);