Yazılım Geliştirme

Trait ile Oluşturan ve Güncelleyeni Takip Etmek

📅 Feb 02, 2026
Laravel projelerinde bir modelin hangi kullanıcı tarafından oluşturulduğunu ve son olarak kim tarafından güncellendiğini takip etmek isteyebilirsiniz. Bu iş için Blameable adında basit bir trait yazabiliriz.

Trait’in Özellikleri

  • bootBlameable() fonksiyonu ile modelin oluşturulma ve güncellenme olaylarını dinliyoruz.
  • Model oluşturulurken hem created_by hem updated_by alanlarına kullanıcı ID’si atanıyor.
  • Model güncellenirken sadece updated_by alanı güncelleniyor.
  • creator() ve editor() metotları sayesinde ilişkili kullanıcı bilgilerini kolayca çekebiliyoruz.

 

                                     <?php

namespace App\Traits;

use Illuminate\Support\Facades\Auth;

trait Blameable
{
public static function bootBlameable()
{
static::creating(function ($model) {
if (Auth::check()) {
$model->created_by = Auth::id();
$model->updated_by = Auth::id();
}
});

static::updating(function ($model) {
if (Auth::check()) {
$model->updated_by = Auth::id();
}
});
}

public function creator()
{
return $this->belongsTo(\App\Models\User::class, 'created_by');
}

public function editor()
{
return $this->belongsTo(\App\Models\User::class, 'updated_by');
}
}
Migration Örneği Trait’i kullanabilmek için modelin tablosuna iki alan eklememiz gerekiyor:
                                     <?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->dropColumn('created_by');
$table->dropColumn('updated_by');
});
}
};
Model Kullanımı
                                     <?php
use App\Traits\Blameable;

class Post extends Model
{
use Blameable;
}
Artık bir Post oluşturduğunuzda veya güncellediğinizde, trait otomatik olarak kullanıcı ID’sini kaydedecek:
                                     <?php

$post = Post::create([
'title' => 'Yeni Yazı',
'content' => 'Yazı içeriği...'
]);

echo $post->creator->name; // Oluşturan Kullanıcı
echo $post->editor->name; // Güncelleyen Kullanıcı
📌 Yazı Bilgileri
  • Otomatik: Model oluşturma ve güncellemede kullanıcıyı otomatik kaydeder.
  • Temiz Kod: Tekrar eden kod yazımını önler.
  • İlişki: `creator()` ve `editor()` ile kullanıcıya kolay erişim sağlar.
  • Esnek: Auth yoksa null bırakır, hataya yol açmaz.
  • Basit Migration: Sadece `created_by` ve `updated_by` alanları eklemek yeterli.
  • Yeniden Kullanılabilir: Trait’i istediğiniz modelde kullanabilirsiniz.
🏷 Etiketler
Laravel Trait Model