Herkese merhabalar fotoğraf yükleme ile ilgili bir trait yazdım fakat bir yerde takılmış durumdayım.
Durumları şöyle özetleyeyim bir tablom var Adı ProductSubType buna iki adet fotoğraf yüklenebilir. Bunuda genel olarak tanımladığım photos tablosunda tutuyorum.
https://prnt.sc/YquhJnTOVNkr
bu şekilde.
Traitim
<?php
namespace App\Eloquent\Traits;
use App\Models\Photo;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Str;
trait HasPhoto
{
public function photos()
{
return $this->morphMany(Photo::class, 'photoable');
}
public function photo()
{
return $this->morphOne(Photo::class, 'photoable');
}
public function upload(UploadedFile $uploadedFile,$comeWhere="default")
{
$name = $uploadedFile->getClientOriginalName();
$ext = $uploadedFile->getClientOriginalExtension();
$photoData=[
'photo_name' => Str::uuid() . '-' . $name,
'photo_type' => $ext
];
if($comeWhere!="default"){
$photoData['showcase_picture']='OTHER';
}
$photo = new Photo($photoData);
$photo->photoable()->associate($this);
$photo->save();
$uploadedFile->storeAs('photos', $photo->photo_name, 'public');
return $photo;
}
public function deletePhotos()
{
/**
* Fotoğraflar veritabanından silindiğinde otomatik olarak fotoğraf dosyaları da silinir.
*
* @see \App\Models\Photo::boot()
*/
$this->photos->each->delete();
return $this;
}
}
photo Modelim
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphTo;
class Photo extends Model
{
use HasFactory;
protected $fillable = [
'photo_name','photo_type','showcase_picture'
];
protected static function boot()
{
parent::boot();
static::deleting(function (self $photo) {
$photo->unlink();
});
}
public function photoable(): MorphTo
{
return $this->morphTo();
}
public function url(): string
{
return asset($this->relative_url());
}
public function relative_url(): string
{
return "/photos/{$this->photo_name}";
}
public function path(): string
{
return public_path($this->relative_url());
}
public function unlink(): bool
{
if (file_exists($path = $this->path())) {
return unlink($path);
}
return false;
}
}
Bu şekilde bir yapı kurdum ama bir olayı yapamıyorum.
if ($productSubType->photo) {
return "<img src=\"" . $productSubType->photo->url() . "\" height=\"100\"/>";
}
bu şekilde erişebiliyorum. Fakat benim burada şey demem lazım OTHER olmayanı getir. Çünkü other dediğimiz resimde olabilir , pdf , excel olabilir ama devamlı gidip OTHER olanı yazmaya çalışıyor ve bu yüzden resim gözükmüyor.Bu yapıyı bozmadan işin içinden nasıl çıkabilirim acaba ?