2015-03-16 19 views
1

Я кодирую с помощью фреймворка PHP - Laravel. Этот код предназначен для загрузки изображений на Amazon S3 и хранения каждого данные изображения в MySQL таблице:Массовая вставка в таблицу с использованием массива

$created_at = new DateTime; 
$aws_path = 'path/to/folder'; 
$files  = Input::file('images'); 
$insert[] = array(); #Initialize array for mass inserting into table 

foreach($files as $file) { 

     # Image data 

     $image_id = mt_rand(1000000000,9999999999); 
     $extension= $file->guessClientExtension(); 
     $filename = $aws_path.'/'.$image_id.".".$extension; 
     $path = $file->getRealPath(); 

     #UPLOAD IMAGE TO AMAZON S3 
     $obj = array(
      'Bucket'  => 's3.bucket.com', 
      'Key'  => $filename, 
      'SourceFile' => $path, 
      'ACL'  => 'public-read', 
     ); 
     AWS::get('s3')->putObject($obj); 

     $insert[] = array(
      'car_id'   => $car_id, 
      'image_id'   => $image_id, 
      'image_extension' => $extension, 
      'is_main'   => true, 
      'created_at'  => $created_at 
     ); 
} 

DB::table('images')->insert($insert); #THIS LINE DOESN'T WORK 

Теперь, этот код работает 100%, за исключением того я не в состоянии представить данные в моей таблице , Переменная $ insert должна быть заполнена данными каждого изображения, а затем после окончания цикла foreach я «вставляю» данные в $ insert в таблицу, называемую «изображениями».

У меня нет ошибок, это просто не работает. Почему это происходит? Заранее спасибо.

ответ

0

Я считаю, что вы добавляете дополнительный массив:

Try ...

$insert = array(
     'car_id'   => $car_id, 
     'image_id'   => $image_id, 
     'image_extension' => $extension, 
     'is_main'   => true, 
     'created_at'  => $created_at 
    ); 

http://laravel.com/docs/4.2/queries

+0

Привет, я просто попытался сделать это и не работал:/ – Daniel

+0

Попробуйте проверить схему таблиц и сравнить ее со вставкой. Я бы получил сырую рабочую вставку в прямом sql для тестирования, а затем преобразовал ее в формат laravel. –

+0

Он отлично работает, если я использую его внутри цикла foreach и без использования массива для массового ввода – Daniel

1

Первый элемент вашего $insert массива является пустым массивом.

Вместо того, чтобы делать инициализацию $insert подобное (в строке 4):

$insert[] = array(); 

Попробуйте это:

$insert = array(); 
+0

Благодарим вас за помощь, но я пробовал в обоих направлениях и не работал ни – Daniel

+0

Я только что понял ошибку @alfallouji, которую вы можете прочитать на этой странице (я отвечаю на свою собственную проблему), но вы тоже были правы. – Daniel

0

Я просто понял, что я идиот (простите за это).

Мой код всегда работал, но я никогда не понимал, что мне удалось изменить страницы для таблицы в PHPmyadmin, и я не смог добавить более 30 записей, но другие записи, где на других страницах. Таким образом, в общей сложности у меня было 140 записей из нескольких тестов. 2 дня впустую здесь люди, на 2 дня меньше для моего срока. Спасибо всем, кто помог вам, всегда был прав.

Смежные вопросы