#laravel #eloquent
#laravel #красноречивый
Вопрос:
Я хочу разорвать связь со всеми файлами с именем из базы данных: имя файла в базе данных. Я пытаюсь использовать подобный код, но он не работает:
public function destroy($id)
{
$infokeg = Infokeg::where('id', $id)->first();
$image[] = $infokeg->foto_kegiatan
unlink(public_path("data_file/".json_decode($image)));
$infokeg->delete();
return redirect('infokeg')->with('msg', 'Data Telah Terhapus');
}
Ответ №1:
File::delete()
обработает массив файлов, подлежащих удалению для вас,
Сначала добавьте его use IlluminateSupportFacadesFile;
public function destroy($id)
{
$infokeg = Infokeg::where('id', $id)->first();
$image[] = $infokeg->foto_kegiatan
// pass the array of files to deleted to it.
// if $image array is like this $image = ['file1.jpg', 'file2.png'];
File::delete($image);
return redirect('infokeg')->with('msg', 'Data Telah Terhapus');
}
Способ 2
Сначала добавьте use IlluminateSupportFacadesStorage;
public function destroy($id)
{
$infokeg = Infokeg::where('id', $id)->first();
$image[] = $infokeg->foto_kegiatan
// pass the array of files to deleted to it.
// if $image array is like this $image = ['file.jpg', 'file2.jpg'];
Storage::delete($image);
return redirect('infokeg')->with('msg', 'Data Telah Terhapus');
}
Для метода 2 обратитесь к документам
Редактировать:
добавить общедоступный путь ко всем,
foreach ($image as amp;$value) {
$value = public_path("data_file/".$value);
}
Он добавит общедоступный путь ко всем значениям в массиве, а затем использует его в методе delete() в качестве своего аргумента.
Комментарии:
1. этот метод просто удаляет данные из базы данных, но изображение в общедоступном все еще существует
2. нет, оба метода будут удалены из общей папки, а также проверьте свой путь
3. у меня есть такой путь: public/data_file/myfile, так что я должен изменить, чтобы определить путь к файлу data_file?
Ответ №2:
использование for для его удаления
public function destroy($id)
{
$infokeg = Infokeg::where('id', $id)->first();
$image = json_decode($infokeg->foto_kegiatan);
$length = count($image);
for ($i = 0; $i < $length; $i ) {
unlink(public_path("data_file/".$image[$i]));
}
$infokeg->delete();
return redirect('infokeg')->with('msg', 'Data Telah Terhapus');
}