Является ли мой для l oop не цикл все данные? - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь заполнить базу данных, используя для l oop. При отправке формы я получаю следующие данные:

"name" => "This is a product title"
  "slug" => "this-is-a-product-title"
  "category_id" => "1"
  "brand_id" => "1"
  "description" => "<p>This is a product description</p>"
  "video" => "https://www.youtube.com/watch?v=kY1F_Y0GniQ"
  "imageColor" => array:2 [▼
    0 => "1"
    1 => "2"
  ]
  "image" => array:2 [▼
    0 => "["http://ecom.local/uploads/product-1.jpg","http://ecom.local/uploads/product-2.jpg"]"
    1 => "["http://ecom.local/uploads/product-4.jpg","http://ecom.local/uploads/product-3.jpg"]"
  ]
  "color" => array:2 [▼
    0 => "1"
    1 => "2"
  ]
  "size" => array:2 [▼
    0 => "11"
    1 => "9"
  ]
  "stock" => "2"
  "price" => array:2 [▼
    0 => "4000"
    1 => "3000"
  ]
  "discount" => array:2 [▼
    0 => "0"
    1 => "0"
  ]
  "status" => "active"

Для заполнения данных я написал следующий код:

public function store(Request $request)
{ 
    $rules = $this->product->getRules();
    $request->validate($rules);
    $data = $request->all();
    $data['name'] = $request->name;
    $data['slug'] = $request->slug;
    $data['category_id'] = $request->category_id;
    $data['brand_id'] = $request->brand_id;
    $data['video'] = $request->video;
    $data['status'] = $request->status; 
    $this->product->fill($data);
    $status = $this->product->save();
    $product_id = $this->product->id;
    if($status){
        if(!empty($request->image)){
            for($i = 0; $i < count($request->image);){
                    $images = $request->image[$i];
                    $images = str_replace('"', '', $images);
                    $images = str_replace(array('[',']'),'',$images);
                    $images = explode(',', $images);
                for($j = 0; $j < count($images[$i]);){
                    $image_data['product_id'] = $product_id;
                    $image_data['color_id'] = $request->imageColor[$i];
                    $image_data['image'] = $images[$j];
                    $this->product_image->fill($image_data);
                    $this->product_image->save();
                    $j++;
                }
                $i++;
            }
        }
        if(!empty($request->size)){
            for($i = 0; $i < count($request->size); $i++){
                $size_data['product_id'] = $product_id;
                $size_data['size_id'] = $request->size[$i];
                $this->product_size->fill($size_data);
                $this->product_size->save();
            }
        }
        $request->session()->flash('success','Product created successfully.');
    } else {
        $request->session()->flash('error','Problem while adding product.');
    }
    return redirect()->route('products.index');
}

Но каждый раз, когда я вставляю продукт, я получить только одну строку в таблицах product_images и product_sizes. У меня для l oop не работает или в моем коде ошибка? На данный момент я получаю этот результат с моим кодом: enter image description here Мой ожидаемый ответ будет выглядеть следующим образом в изображениях продуктов tabel enter image description here

1 Ответ

1 голос
/ 17 февраля 2020

Вы должны создать новые изображения, как в следующем примере:

[...]
$product_image = new Image;
$image_data['product_id'] = $product_id;
$image_data['color_id'] = $request->imageColor[$i];
$image_data['image'] = $images[$j];
$product_image->fill($image_data);
$product_image->product_id = $this->id;
$product_image->save();
[...]

В противном случае он создаст только один.

Я думаю, что для l oop тоже неправильно:

for($j = 0; $j < count($images[$i]);){

изменить на:

for($j = 0; $j < count($images);){
...