【问题标题】:Inserting bulk of data in Laravel在 Laravel 中插入大量数据
【发布时间】:2018-02-13 02:16:26
【问题描述】:

我想插入具有相同输入“名称”的数据。 例如

{!! Form::open(['action' => 'PageController@store', 'method' => 'POST', 'enctype' => 'multipart/form-data']) !!}
<input type="text" class="form-control" name="name[]" placeholder="Name">
<input type="file" class="form-control-file" name="img[]">
<input type="text" class="form-control" name="name[]" placeholder="Name">
<input type="file" class="form-control-file" name="img[]">
<button type="submit" class="btn btn-primary">Save</button>   
{!! Form::close() !!} 

我想得到以下结果

ID|page_id|name|img
1 |15     |1   |file1.jpg
2 |15     |2   |file2.jpg
3 |15     |3   |file3.jpg

控制器

    public function store(Request $request)
{
   if($request->hasFile('img')){
        $fileNameExt = $request->file('img')->getClientOriginalName();
        $fileName = pathinfo($fileNameExt, PATHINFO_FILENAME);
        $fileExt = $request->file('img')->getClientOriginalExtension();
        $fileNameToStore = $fileName.'_'.time().'.'.$fileExt;
        $pathToStore = $request->file('img')->storeAs('public/images',$fileNameToStore);
    }

   $info = new Info;
   $info->name = $request->input('Name');
   $info->img = $fileNameToStore;
   $info->page_id = $page->id; 
   $info->save();   
}

顺便说一句,我做了一些测试,如果我使用,我的值甚至没有返回

name="img[]"

但如果我使用下面的代码,它可以工作,但只返回最后一个输入数据

name="img"

$info = new Info;
   $name = $info ->name = $request->input('name');
   $img = $info ->img = $fileNameToStore;
   $id = $baninfo er->company_id = $company->id; 

   return $reqs = [$name,$img,$id];

将返回以下代码

[["name 1","name 2"],"123_1504558228.jpg",133]

但我希望得到 2 张图片而不是最后一个输入的 img... 任何提示如何插入这样的数据?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    嘿,我的Juune,

    我认为您的问题出在下面显示的代码行中。

    if($request->hasFile('img')){
    

    当您将img[] 放在您的视图中时,它会自动创建一个数组。您忘记的是遍历图像数组。 $request-&gt;get('img') 当前代表一个图像数组。

    如果您使用dd($request-&gt;get('img'));,您应该会看到一组图像。 (当然,当您在输入中使用 img[] 时)。

    当您这样做时,您的代码应该可以工作:(我假设name 数组的长度与img 数组的长度相同,因为img 数组的数组键正在用于检索名称值。您还可以看到我将您的数据库记录创建过程放入循环中,因为您将名称与图像相关联。

     public function store(Request $request)
        {
           if($request->has('img')) {
    
              foreach($request->get('img') as $key => $img)
                $fileNameExt = $img->getClientOriginalName();
                $fileName = pathinfo($fileNameExt, PATHINFO_FILENAME);
                $fileExt = $img->getClientOriginalExtension();
                $fileNameToStore = $fileName.'_'.time().'.'.$fileExt;
                $pathToStore = $img->storeAs('public/images',$fileNameToStore);
    
               $info = new Info;
               $info->name = $request->input('Name')[$key];
               $info->img = $fileNameToStore;
               $info->page_id = $page->id; 
               $info->save(); 
    
            }
    
           }
    

    希望这会有所帮助! ;)

    【讨论】:

    • 感谢您的回答,它可能对我有所帮助。此时提交表单后一切正常,但没有将数据保存到数据库编辑:我测试了 dd($request->get('img'));它返回 NULL
    • 嗨 myJuune,对于我迟到的回复,我深表歉意。我很好奇您是否已经找到解决问题的方法?也许你可以邀请我在 Github 上合作,这样我可以帮助你?如果您想要另一个带有解决方案的答案,我也可以发布一个新答案。 (我的设置可能与你的有点不同,但我不认为问题出在你的设置上)
    猜你喜欢
    • 2012-11-01
    • 1970-01-01
    • 2021-12-24
    • 2018-12-31
    • 2013-01-30
    • 1970-01-01
    • 2019-11-22
    • 2015-11-27
    相关资源
    最近更新 更多