2016-07-19 3 views
0

Я хочу удалить файлы с сервера по идентификаторам базы данных. Я пытаюсь сделать это в петле foreach. Удаление одного файла в порядке, но когда пользователь отправляет несколько файлов (по флажку), мой цикл удаляется только первым.Laravel, несколько файлов, удаленных в foreach

public function postSil(Request $request) 
{ 
    $ids = $request->input('sil'); 
    foreach($ids as $id) 
    { 
     $file = File::find($id)->first(); 
     $path = public_path().'/rea-files/'.$file->rea_number.'/'.$file->file_name; 
     \File::delete($path); 
     // echo 'id'; 



    } 
    //return 1; 
    File::destroy($ids); //this is model file. 
    return redirect()->back(); 
} 

Как вы можете видеть, я попробовал, если цикл Еогеасп работает хорошо, размещенное эхо и вернуться, и я вижу цикл Еогеаспа работает, но только удаляю первый файл.

+0

Вы проверили, что пути к файлам верны во всей итерации цикла foreach? –

+0

Сделайте некоторые проверки как ниже 'if (! \ File :: exists ($ path)) {dd ($ path); } 'Это будет печатать путь, если нет файла для данного пути –

ответ

0

попробуйте ниже код

поля

(случай А) Система индексированные по номеру 0,1,2 ..

$users_to_delete = array(
    '0'=> array('1','Frank','Smith','Whatever'), 
    '1'=> array('5','John','Johnson','Whateverelse'), 
); 

$ids_to_delete = array_map(function($item){ return $item[0]; }, $users_to_delete); 

DB::table('users')->whereIn('id', $ids_to_delete)->delete(); 

// (случай Б) Пользовательские поля индексируются по ключевым

$users_to_delete = array(
    '0'=> array('id'=>'1','name'=>'Frank','surname'=>'Smith','title'=>'Whatever'), 

    '1'=> array('id'=>'5','name'=>'John','surname'=>'Johnson','title'=>'Whateverelse'), 
); 

$ids_to_delete = array_map(function($item){ return $item['id']; }, $users_to_delete); 

DB::table('users')->whereIn('id', $ids_to_delete)->delete(); 

случай с

$ ids = array ('0' => 1, '1' => 2);

DB :: table ('users') -> whereIn ('id', $ ids) -> delete();