Laravel。两张桌子的关系,很多照片的选择

时间:2018-11-24 13:15:24

标签: laravel laravel-5

我有两个表: 日历,以及将一个日历事件与许多照片相关联的照片。

我想在创建活动时添加很多照片。目前,我只能一对一地拥有一个。

我的代码: 与照片的日历模型关系:

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(密码键)。 感谢您的帮助!

1 个答案:

答案 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