我有两个表: 日历,以及将一个日历事件与许多照片相关联的照片。
我想在创建活动时添加很多照片。目前,我只能一对一地拥有一个。
我的代码: 与照片的日历模型关系:
public function photos()
{
return $this->hasMany(Photo::class);
}
与日历的照片模型关系:
public function calendar()
{
return $this->belongsTo(Calendar::class, 'calendar_id');
}
可以,并且可以正常工作。
create.blade.php视图的片段:
<div class="card-body">
<form action="{{ action ('CalendarController@store')}}" method="POST"
enctype="multipart/form-data">
<input type="hidden" name="_token" value="{{csrf_token() }}"/>
<div class="form-group">
<label for="photo">Photo:</label> <select class="form-control" name="photo">
@foreach($photos as $photo)
<option value="{{ $photo->id }}">{{ $photo->path }}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="header">Header</label> <input type="text" class="form-control" name="header"/></div>
<div class="form-group">
<label for="description">Description</label><input type="text" class="form-control" name="description"/></div>
<div class="form-group">
<label for="date">Date</label> <input type="date" class="form-control" name="date"/></div>
<input type="submit" value="Create" class="btn btn-primary"/>
</form>
</div>
此刻,我有一个经典的选择列表,在这里我只能选择一个选项。
日历控制器代码(函数创建和存储):
public function create()
{
$photos = Photo::all();
return view('pages.calendar.create', [
"photos" => $photos
]);
}
public function store(Request $request)
{
$request->validate([
'header' => 'required|max:255',
'description' => 'required',
'date' => 'required',
]);
$calendar = new Calendar();
$calendar->header = $request->input('header');
$calendar->description = $request->input('description');
$calendar->date = $request->input('date');
$calendar->save();
$photo = Photo::find($request->input('photo'));
if($photo !== null) {
$photo->calendar_id = $calendar->id;
$photo->save();
}
return redirect()->action('CalendarController@clist');
}
如何将这段代码片段更改为多店照片:
$photo = Photo::find($request->input('photo'));
if($photo !== null) {
$photo->calendar_id = $calendar->id;
$photo->save();
}
我在“照片”表中有calendar_id(密码键)。 感谢您的帮助!
答案 0 :(得分:0)
1-将您的选择更改为多个输入
<input type="file" name="photos[]" class="form-control">
1-在控制器中进行一次foreach遍历每张图像
if($photos=$request->file('photos')){
foreach($photos as $image){
$name = $photo->getClientOriginalName();
$photo = Photo::where('name',$name)->first();
if(is_null($photo)) {
$photo = new Photo();
}
$photo->name = $name;
$photo->calendar_id = $calendar->id;
$photo->save();
}
}
3-也许您可以使用一些PHP软件包来处理图片,例如http://image.intervention.io/
4-看看这个答案。 https://stackoverflow.com/questions/42643265/how-to-upload-multiple-image-in-laravel