简体   繁体   中英

Laravel - Save multiple field values in json/array in a column

I have 3 form fields name, address, profile_photo . I want to save there 3 fields in json/array format in a single column so that I can retrieve it later in view blade.

My form looks like this 动态场

I tried

$customer_details= new Customer;
  {

   $profile_photo = $request->file('profile_photo');
   for ($i=0; $i < count(request('profile_photo')); $i++) {

   $pro_fileExt =  $profile_photo[$i]->getClientOriginalExtension();
   $pro_fileNameToStore = time().'.'.$pro_fileExt;

   $pro_pathToStore = public_path('images');

   Image::make($profile_photo[$i])->save($pro_pathToStore . DIRECTORY_SEPARATOR. $pro_fileNameToStore);
   $profile_ph = '/images/'.$pro_fileNameToStore; }

   $cust_details=json_encode(request(['name', 'address', $profile_ph]));
   $customer_details->details = $cust_details;
   $customer_details->save();
  }

With this profile_photo is not saved but other data are saved as:

{"name":["john","Sam"],"address":["CA","FL"]}

How can I save all there fields including profile_photo and show each details distinctly later on view blade?

Hope this will help you.

    $customer_details = new Customer;

    $profile_photo = $request->file('profile_photo');
    $profile_ph = [];

    for ($i = 0; $i < count(request('profile_photo')); $i++) {

        $pro_fileExt = $profile_photo[$i]->getClientOriginalExtension();
        $pro_fileNameToStore = time() . '.' . $pro_fileExt;

        $pro_pathToStore = public_path('images');

        Image::make($profile_photo[$i])->save($pro_pathToStore . DIRECTORY_SEPARATOR . $pro_fileNameToStore);
        $profile_ph[$i] = '/images/' . $pro_fileNameToStore;
    }

    $data = [
        'name' => $request->name,
        'address' => $request->address,
        'profile_ph' => $profile_ph
    ];

    $customer_details->details = json_encode($data);

    $customer_details->save();

The details column should be text if you are using mysql.

Try this:

$names = $request->input('name');
$addresses = $request->input('address');
$profile_photos = $request->file('profile_photo');
for ($i = 0; $i < count($names); $i++) {
    $customer_details = new Customer;
    $pro_fileExt = $profile_photos[$i]->getClientOriginalExtension();
    $pro_fileNameToStore = time() . '.' . $pro_fileExt;

    $pro_pathToStore = public_path('images');

    Image::make($profile_photos[$i])->save($pro_pathToStore . DIRECTORY_SEPARATOR . $pro_fileNameToStore);
    $profile_ph = '/images/' . $pro_fileNameToStore;

    $cust_details = json_encode([
        'name' => $names[$i],
        'address' => $addresses[$i],
        'profile_photo' => $profile_ph,
    ]);

    $customer_details->details = $cust_details;
    $customer_details->save();
}

Try this with single database query

$profile_photo = $request->file('profile_photo');
$finalData = [];
$names = [];
$addresses = [];
$images = [];
for ($i=0; $i < count(request('profile_photo')); $i++) {
  $pro_fileExt =  $profile_photo[$i]->getClientOriginalExtension();
  $pro_fileNameToStore = time().'.'.$pro_fileExt;
  $pro_pathToStore = public_path('images');
  Image::make($profile_photo[$i])->save($pro_pathToStore . DIRECTORY_SEPARATOR. $pro_fileNameToStore);
  $profile_ph = '/images/'.$pro_fileNameToStore; }
  $names[] = $request->input('name');
  $addresses[] = $request->input('address');
  $images[] = $profile_ph;
}
 $cust_details=json_encode(['name' => $names, 'address' => $addresses, 'images' => $images]);
 $customer_details->insert($cust_details);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM