Örneğin bir Blog modeli ve bir Post modeli hem fotoğraf hem video gibi medya içeriklerini alabilir.
Laravel’in polimorfik ilişkileri burada devreye girer. MorphMany, bir modelin birden fazla polimorfik ilişkili veriyi (örneğin Media) tutmasını sağlar.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Media extends Model
{
protected $fillable = ['url', 'type'];
public function mediable()
{
return $this->morphTo();
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Blog extends Model
{
public function media()
{
return $this->morphMany(Media::class, 'mediable');
}
}
class Post extends Model
{
public function media()
{
return $this->morphMany(Media::class, 'mediable');
}
}
<?php
Schema::create('media', function (Blueprint $table) {
$table->id();
$table->string('url');
$table->string('type'); // image, video, pdf vs.
$table->morphs('mediable'); // mediable_id ve mediable_type
$table->timestamps();
});
<?php
$blog = Blog::find(1);
$post = Post::find(1);
// Blog’a Media ekleme
$blog->media()->create([
'url' => 'https://www.mehmetcanguler.com/uploads/blog-image.jpg',
'type' => 'image'
]);
// Post’a Media ekleme
$post->media()->create([
'url' => 'https://www.mehmetcanguler.com/uploads/post-video.mp4',
'type' => 'video'
]);
// Blog’un Medialarını çekme
$blogMedia = $blog->media;
// Post’un Medialarını çekme
$postMedia = $post->media;