Я пытаюсь обновить несколько изображений в laravel, но я не могу это сделать. Когда я сохранил изображение в моей базе данных, то он работает нормально, но проблема с обновлением. Пожалуйста, дайте мне знать, где я ошибаюсь. У меня есть связь между изображением и таблицей блога.
Вот мой код контроллера ...
public function update(Request $r, $blog)
{
//dd($r->all());
$type = 'blog_img';
$chr = substr($r->title, 0, 1);
if (!is_dir(public_path() . '/' . $type)) {
$blogDir = public_path() . '/' . $type;
mkdir($blogDir, 0777, true);
}
if (!is_dir(public_path() . '/' . $type . '/' . date("Ymd"))) {
$dateDir = public_path() . '/' . $type . '/' . date("Ymd");
mkdir($dateDir, 0777, true);
}
if (!is_dir(public_path() . '/' . $type . '/' . date("Ymd") . '/thumb')) {
$thumbDir = public_path() . '/' . $type . '/' . date("Ymd") . '/thumb';
mkdir($thumbDir, 0777, true);
}
if (!is_dir(public_path() . '/' . $type . '/' . date("Ymd") . '/small')) {
$smallDir = public_path() . '/' . $type . '/' . date("Ymd") . '/small';
mkdir($smallDir, 0777, true);
}
if (!is_dir(public_path() . '/' . $type . '/' . date("Ymd") . '/thumb' . '/' . $chr)) {
$chrThumbDir = public_path() . '/' . $type . '/' . date("Ymd") . '/thumb' . '/' . $chr;
mkdir($chrThumbDir, 0777, true);
}
if (!is_dir(public_path() . '/' . $type . '/' . date("Ymd") . '/small' . '/' . $chr)) {
$chrSmallDir = public_path() . '/' . $type . '/' . date("Ymd") . '/small' . '/' . $chr;
mkdir($chrSmallDir, 0777, true);
}
$thumbDirPath = date("Ymd") . '/thumb/' . $chr;
$smallDirPath = date("Ymd") . '/small/' . $chr;
if ($r->hasFile('propertyImages')) {
$blImage = [];
//dd($r->blog_image);
for ($v = 0; $v < count($r->blog_image); $v++) {
$thums = $r->blog_image;
$filnameSmall = 'small-' . uniqid($chr) . '-' . $v . '.' . $thums[$v]->getClientOriginalExtension();
$img = Image::make($thums[$v]->getRealPath());
$img->resize(300, null, function ($constraint) {
$constraint->aspectRatio();
});
$smallPath = public_path() . '/' . $type . '/' . date("Ymd") . '/small' . '/' . $chr . '/' . $filnameSmall;
if (file_exists($smallPath)) {
$this->removeImage($smallPath);
}
$img->save($smallPath);
$optimizerChain = OptimizerChainFactory::create();
$optimizerChain->optimize($smallPath);
$filnameLarge = 'thumb-' . uniqid($chr) . '-' . $v . '.' . $thums[$v]->getClientOriginalExtension();
$img = Image::make($thums[$v]->getRealPath());
$img->resize(1080, null, function ($constraint) {
$constraint->aspectRatio();
});
$thumbPath = public_path() . '/' . $type . '/' . date("Ymd") . '/thumb' . '/' . $chr . '/' . $filnameLarge;
if (file_exists($thumbPath)) {
$this->removeImage($thumbPath);
}
$img->save($thumbPath);
$optimizerChain->optimize($thumbPath);
$blImage[$v]['small'] = $filnameSmall;
$blImage[$v]['smallDirPath'] = $smallDirPath;
$blImage[$v]['large'] = $filnameLarge;
$blImage[$v]['thumbDirPath'] = $thumbDirPath;
}
}
else {
$blImage = NULL;
}
$images = $blImage;
$blog = Blog::find($blog);
$blog->name = $r->bl_name;
$blog->slug = Str::slug($r->bl_slug);
$blog->meta_title = $r->meta_title;
$blog->meta_desc = $r->meta_desc;
$blog->description = $r->overview;
$blog->status = $r->status;
$blog->blogTag()->delete();
$tagNames = explode(',', $r->blogtags);
foreach ($tagNames as $key => $value) {
$blog->blogTag()->updateOrCreate([
'tag_name' => $value,
'tag_slug' => Str::slug($value, '-')
]);
}
if ($images != null) {
for ($v = 0; $v <= array_key_last($images); $v++) {
if (!empty($images[$v])) {
$blog->blogImage()->updateOrCreate(['id' => $images[$v]['id']], [
'small_thumb' => $images[$v]['small'],
'small_thumb_url' => $images[$v]['smallDirPath'],
'large_thumb' => $images[$v]['large'],
'large_thumb_url' => $images[$v]['thumbDirPath'],
]);
}
}
}
$blog->save();
return response()->json(['status' => 1], 200);
}
и вот мой код обновления изображения в файле вида:
<div class="statbox widget box box-shadow">
<div class="widget-header">
<div class="row">
<div class="col-xl-12 col-md-12 col-sm-12 col-12">
<h4>Upload Blog Image</h4>
</div>
</div>
</div>
<div class="widget-content widget-content-area">
@forelse($blog->blogImage as $propImg)
<div class="custom-file-container" data-upload-id="myFirstImage">
<label>Upload (Single File) <a href="javascript:void(0)" class="custom-file-container__image-clear" title="Clear Image">x</a></label>
<label class="custom-file-container__custom-file" >
<input type="file" name="blog_image[]" class="custom-file-container__custom-file__custom-file-input" accept="image/*">
<input type="hidden" name="MAX_FILE_SIZE" value="10485760" />
<span class="custom-file-container__custom-file__custom-file-control"></span>
</label>
<div class="custom-file-container__image-preview"><img src="{{ asset('blog_img/'.$propImg->small_thumb_url.'/'.$propImg->small_thumb)}}" style="max-height: 90px;">
</div>
@empty
@endforelse
</div>
</div>
</div>
А вот и Блох. php Модель ..
public function blogImage()
{
return $this->hasMany(BlogImage::class);
}
, а вот BlogImage. php Модель ..
public function blog()
{
return $this->hasMany(Blog::class);
}