сохранить 2 массива одновременно в laravel - PullRequest
0 голосов
/ 18 марта 2020

Я хочу сохранить массив изображений продуктов и массивы color_id в них в одном и том же порядке, поэтому здесь у меня теперь есть 2 массива: images и color_id, и я знаю, что первый элемент в массиве images равен первому элементу в color_id массив теперь для этого я делаю, как показано ниже:

public function uploadImages($data, $product,$color_id = null,$size_id = null)
{
        $previousImageIds = $product->images()->pluck('id');
        $i = null;
        if (isset($data['images'])) {
            foreach ($data['images'] as $imageId => $image) {
              $file = 'images.' . $imageId;
                $dir = 'product/' . $product->id;
                if (str_contains($imageId, 'image_')) {
                    if (request()->hasFile($file)) {
                        $i++;
                        $this->create([
                                'path' => request()->file($file)->store($dir),
                                'product_id' => $product->id,
                                'product_color_id' => $color_id[$i],
                                'product_size_id'=> $size_id ,
                            ]);
                    }
                } 
        }
}

Теперь, когда я передаю эти 2 массива этой функции, как показано ниже:

^ array:3 [▼
  "image_1" => Illuminate\Http\UploadedFile {#756 ▶}
  "image_2" => Illuminate\Http\UploadedFile {#790 ▶}
  "image_3" => Illuminate\Http\UploadedFile {#753 ▶}
]

и цветовой массив, как показано ниже:

^ array:3 [▼
  0 => "3"
  1 => "1"
  2 => "2"
]

Я получаю эту ошибку:

Неопределенное смещение: 3 // в этой строке 'product_color_id' => $ color_id [$ i],

Теперь это иногда работает, иногда нет, нет ли способа синхронизировать c индексы 2-х массивов и не давать им выбросить ошибку. спасибо

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Надеюсь, это сработает ...

public function uploadImages($data, $product,$color_id = null,$size_id = null)
{
        $previousImageIds = $product->images()->pluck('id');
        $i = 0;
        if (isset($data['images'])) {
            foreach ($data['images'] as $imageId => $image) {
              $file = 'images.' . $imageId;
                $dir = 'product/' . $product->id;
                if (str_contains($imageId, 'image_')) {
                    if (request()->hasFile($file)) {
                        // $i++; //removed
                        $this->create([
                                'path' => request()->file($file)->store($dir),
                                'product_id' => $product->id,
                                'product_color_id' => $color_id[$i],
                                'product_size_id'=> $size_id ,
                            ]);
                    }
                }
            $i++; //added
            } 
        }
}
1 голос
/ 18 марта 2020

Вы получаете эту ошибку, потому что вы увеличиваете $i++ перед ее использованием. Таким образом, $i становится 1 в первой итерации, затем 2 и затем 3. Но в вашем массиве цветов индекс 3 не существует

Чтобы решить эту проблему, вы должны добавить $i++ в конце. Также проверьте isset и !empty вашего индекса массива color_id для обработки ошибок, если индекс не существует

  public function uploadImages($data, $product,$color_id = null,$size_id = null) {
    $previousImageIds = $product->images()->pluck('id');
    $i = null;
    if (isset($data['images'])) {
        foreach ($data['images'] as $imageId => $image) {
          $file = 'images.' . $imageId;
            $dir = 'product/' . $product->id;
            if (str_contains($imageId, 'image_')) {
                if (request()->hasFile($file)) {
                   $colorId = "";
                   if (isset($color_id[$i]) && !empty($color_id[$i])) {
                           $colorId = $color_id[$i];
                   }

                   $this->create([
                      'path' => request()->file($file)->store($dir),
                      'product_id' => $product->id,
                      'product_color_id' => $colorId,
                      'product_size_id'=> $size_id ,
                   ]);
                }
            } 
            $i++; // add this
        }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...