Reputation: 251
How can I pass multiple images files from two separate file upload option in my form and then store into database? Here are my schema and controller codes.
Schema::create('images', function (Blueprint $table) {
$table->increments('image_id');
$table->increments('book_id')->unsigned();
$table->string('coverPageImage');
$table->string('previewPageImage');
$table->timestamps();
});
Form Fields: BookID, File Upload for coverPageImage, File Upload for previewPageImage. Both coverPageImage and previewPageImage pass multiple images.
I was able to upload images into folder and save to database for single file upload.
$product_images = $request->file('coverPageImage');
foreach($product_images as $product_image){
$coverImage_name = $product_image->getClientOriginalName();
$upload = $product_image->move('images', $coverImage_name);
Image::create([
'book_id' => $book_id,
'cover_images' => $coverImage_name
]);
}
$preview_pages = $request->file('previewPageImage')
foreach($preview_pages as $preview_image){
$previewImage_name = $preview_image->getClientOriginalName();
$upload = $preview_image->move('images', $previewImage_name);
Image::create([
'book_id' => $book_id,
'preview_images' => $previewImage_name
]);
}
I want to use following way:
Image::create([
'book_id' => $book_id,
'cover_images' => $coverImage_name,
'preview_images' => $previewImage_name
]);
But I am stuck while using foreach loop for two different fileuploads. Any suggestions or hints.
Upvotes: 0
Views: 437
Reputation: 50797
If you are sure there will always be a 1:1 relationship between the $coverImage_name
and the $previewImage_name
, then you can just push them into an array, loop the array, and create your images from within.
$images = [];
$product_images = $request->file('coverPageImage');
foreach ($product_images as $idx => $product_image){
$coverImage_name = $product_image->getClientOriginalName();
$upload = $product_image->move('images', $coverImage_name);
$images[$idx]['cover_image'] = $coverImage_name;
}
$preview_pages = $request->file('previewPageImage')
foreach($preview_pages as $idx => $preview_image){
$previewImage_name = $preview_image->getClientOriginalName();
$upload = $preview_image->move('images', $previewImage_name);
$images[$idx]['preview_image'] = $previewImage_name;
}
foreach($images as $idx => $arr) {
Image::create([
'book_id' => $book_id,
'cover_images' => isset($arr['cover_image']) ? $arr['cover_image'] : null,
'preview_image' => isset($arr['preview_image']) ? $arr['preview_image'] : null
]);
}
Upvotes: 1