Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Merhaba,

Ürünler için geçmiş tutuyorum yapılan bir değişiklik güncelleme olduğu zaman şu şekilde;

$product->update([
    'name' => $request->input('product_name'),
    'description' => $request->input('description'),
    'category_id' => $request->input('category_id'),
    'brand_id' => $request->input('brand_id'),
    'free_shipping' => $request->has('free_shipping') ? 1 : 0
]);

activity()->performedOn($product)->log('Güncelleme yapıldı. <br> <b>İşlemi yapan kullanıcı: </b> '.auth()->user()->full_name);

$product->save();

Fakat mesela direkt olarak name mi değişti? brand_id mi değişti? bunları Laravel'in bir özelliği var mı değişip değişmediğini kontrol edebileceğimiz yoksa manuel olarak güncelledikten sonra önce ve şimdi diye biz bir check edeceğiz?

    Controller'i kısaltmak adına, bu işlemleri Observer içerisinde de yapabilirsiniz.

    https://laravel.com/docs/9.x/eloquent#observers

    Örneğin;

    public function updated(Product $product): void
    {
        if($product->isDirty('name')){
        // name attribute değişti ise true dönecek burada log basabilirsiniz 
        // $product->getOriginal('name') => name değişmiş ise burada eski değeri de alabilirsiniz
        // daha detaylı log tutmak istiyorsanız işe yarayabilir...
     }
    }

      BoraN7 Çok teşekkürler Observer ne olduğunu bilmiyorum ama araştıracağım

        5 gün sonra

        gundogduyakici Denemek için sorunuzu olduğu gibi kopyalayarak, Open AI Chat'e sordum.

        Yapay zekanın yanıtını olduğu gibi iletiyorum 🙂

        Merhaba,

        Evet, Laravel'de bir özelliği olan wasChanged methodu, bir model üzerinde yapılan bir değişikliğin ne olduğunu kontrol etmek için kullanılabilir. Örneğin:

        if ($product->wasChanged('name')) {
            // "name" değişti
        }

        Bu method, bir modelin save methodu çağrıldıktan sonra kullanılabilir.

        Ayrıca, $product->update methodu, sadece değişen alanları güncelleyecektir, bu nedenle eğer sadece name değişmişse sadece name güncellenecektir.

        İyi çalışmalar!