Laravel,在foreach中删除多个文件

时间:2016-07-19 10:27:21

标签: laravel

我想通过数据库ID从服务器中删除文件。 我试图在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();
}

正如你所看到的,我试过如果foreach循环也能工作,放置echo并返回,我看到foreach循环正在工作,但只删除了第一个文件。

2 个答案:

答案 0 :(得分:0)

我已经解决了。我在File :: delete()

中使用了数组

答案 1 :(得分:0)

只需尝试下面的代码

(案例A)用数字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();

//(案例B)用键索引的用户字段

$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();

案例c

  

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

     

DB ::表('用户') - >其中(' ID',$ IDS) - >删除();