zettz's avatar
Level 1

Combine input and image array and save to database

Hi there, my question based on my last post https://laracasts.com/discuss/channels/laravel/insert-array-as-new-value-in-database-table

How can I save the images name to db columns based on user input. Current store syntax:

if ( $request->hasFile('img_file') ) {
            $files = $request->file('img_file');
            $imgname = explode(',', $request->img_name);
            $imgdesc = explode(',', $request->img_desc);
            $merge = array_combine ($imgname, $imgdesc);
            foreach ( $merge as $img_name => $img_desc ) {
                $userimage = $request->user()->userimages()->create([
                    'img_name' => $img_name,
                    'img_desc' => $img_desc,
                ]);
            }

       foreach ($files as $file) {
                $ext = $file->getClientOriginalExtension();
                $newfilename = str_replace(' ' , '-', $img_name) . '.' . $ext;
                
                $place = 'public/users/' . $user->id . '-' . $user->reg_num . '/' . $newfilename;
                Storage::put($place, File::get($file));

                $userimage->img_file = $newfilename;
                $userimage->update();
       }
}

Current result: the above syntax work, but it will create many files. For example, if user upload 2 files, it'll create 4 files, not 2.

Desired result: The file name for each uploaded file will be replaced based on "img_name" from input. So if user upload 2 files with img_name = ["A","B"], the uploaded files will be "A.ext" and "B.ext".

Thx.

0 likes
0 replies

Please or to participate in this conversation.