【问题标题】:Laravel. Two tables in relationship, selection of many photos拉拉维尔。关系中的两张表,选择许多照片
【发布时间】:2018-11-24 13:15:23
【问题描述】:

我有两张桌子: 日历和照片在一个日历的事件与多张照片的关系中。

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

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

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 (fereign key)。 感谢您的帮助!

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    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

    【讨论】:

    • 谢谢,我会试试的。
    猜你喜欢
    • 2015-04-13
    • 1970-01-01
    • 2019-04-24
    • 2017-08-24
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    相关资源
    最近更新 更多