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

Merhabalar kolay gelsin ilanlar diye bir tablom var bu tablodaki herhangi bir satırda değişiklik olduğunda yani nereden olursa olsun o satırın isActive değerini 0 durumuna getirmek istiyorum bu mümkün müdür ?

    Model event ile de yapabilirsiniz zannediyorum.
    Updating ya da Updated ateslendikten sonra, o modelin isActive sütununu guncelletirsiniz.

    
    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class ExampleModel extends Model
    {
        /**
         * The "booted" method of the model.
         *
         * @return void
         */
        protected static function booted()
        {
            static::updating(function ($ExampleModel) {
                // Burada istedigin sütuna tekrar islem
                // yaptirabilirsin 
            });
        }
    }

    https://laravel.com/docs/8.x/eloquent#events-using-closures

      BoraN7 Sonra yine aynı modeli güncellediğiniz için sonsuz döngüye girersiniz. O yüzden Laravel sürümünü sordum, ona göre çözüm önereceğim.

        Model event içinde olmaz o.Aynı modele gidiyorsunuz @mgsmus un dediği gibi loopa girecektir..Burada aslında bir attribute tanımlayıp kullanıcı bilgisine göre bir şey yapılabilir.

        mgsmus Laravel 8 kullanıyorum.

        Birde başka bir sorum mevcut. Şimdi kategoriler diye bir tablom var içeriği böyle https://prnt.sc/10cvkl6 ben bir kategoriye gidince ona ait olan ilanları listeleyebiliyorum burada bir sorun yok fakat bu kategorinin alt kategorilerinin ilanlarınıda getirmek istiyorum bunun kolaylaştırmak için bir eloquent sorgusu varmı yoksa ben foreach ile devammı edeyim 😀

          TurgutEfeYksel Şöyle bir deneyin, oluşacak etkiyi tam kestiremedim:

          protected static function booted()
          {
              static::updating(function($model) {
                  if($model->isDirty() {
                      $model->isActive = 0;
                  });
              });
          }

            mgsmus Sağolun hocam eve geçtiğimde deneyeceğim.

            TurgutEfeYksel Birde başka bir sorum mevcut. Şimdi kategoriler diye bir tablom var içeriği böyle https://prnt.sc/10cvkl6 ben bir kategoriye gidince ona ait olan ilanları listeleyebiliyorum burada bir sorun yok fakat bu kategorinin alt kategorilerinin ilanlarınıda getirmek istiyorum bunun kolaylaştırmak için bir eloquent sorgusu varmı yoksa ben foreach ile devammı edeyim 😀

            bu sorumada cevap verebilirseniz çok sevinirim 😀

            TurgutEfeYksel Kategori ile ilgili olarak şu paketi kullanabilirsiniz: https://github.com/BlueM/Tree

            // Önce tüm kategorileri çekeceksiniz
            $data = Category::select('id', 'parentId')
                ->get()
                ->toArray();
            
            $tree = new BlueM\Tree($data, [
                'rootId' => null, 
                'id' => 'id', 
                'parent' => 'parentId'
            ]);
            
            // Burada listeleme yapacağınız kategoriyi seçiyorsunuz, mesela id'si 5 olan kategori
            $category = $tree->getNodeById(5);
            
            // Bu seçtiğiniz kategori ve altında yer alan tüm kategori id'lerini recursive toplayan dizi olacak
            $ids = [];
            
            foreach($category->getDescendantsAndSelf() as $node) {
                $ids[] = $node->getId();
            }
            
            // Artık elinizde [5, 8, 13, 24] gibi kategoriyi ve tüm alt kategori id'lerini barındıran bir dizi var
            // Bununla kategorisi olan modelleri çekebilirsiniz. Mesela:
            $products = Product::whereIn('category_id', $ids)
                ->paginate();

            Dokümanlara bakarak yazdım, hatalı yer olabilir.

              12 gün sonra

              mgsmus Merhabalar hocam bu paketle en alttaki kategorinin üst kategorilerini nasıl alırım acaba dökümanlara baktımda bulamadım ?

                TurgutEfeYksel Şu şekilde:

                // Üst kategorileri (En üste kadar hepsi)
                $ancestors = $node->getAncestors();
                
                // Üst kategorileri ve kendisi (En üste kadar hepsi)
                $ancestorsPlusSelf = $node->getAncestorsAndSelf();

                Tüm özellikler:

                // Tüm ana kategoriler (yani parent_id null ya da 0 olanlar)
                $rootNodes = $tree->getRootNodes();
                
                // Tüm kategoriler
                $allNodes = $tree->getNodes();
                
                // Kategori (id değerine göre)
                $node = $tree->getNodeById(12345);
                
                // Bir üst kategori
                $parentNode = $node->getParent();
                
                // Kategori ile aynı seviyedeki diğer kategoriler
                $siblings = $node->getSiblings();
                
                // Kategori ile aynı seviyedeki diğer kategoriler ve kendisi
                $siblings = $node->getSiblingsAndSelf();
                
                // Aynı seviyedeki, bir önceki kategori
                $precedingSibling = $node->getPrecedingSibling();
                
                // Aynı seviyedeki, bir sonraki kategori
                $followingSibling = $node->getFollowingSibling();
                
                // Alt kategorileri var mı?
                $bool = $node->hasChildren();
                
                // Kaç tane alt kategorisi var?
                $bool = $node->countChildren();
                
                // Alt kategoriler (sadece bir seviye)
                $children = $node->getChildren();
                
                // Üst kategorileri (En üste kadar hepsi)
                $ancestors = $node->getAncestors();
                
                // Üst kategorileri ve kendisi (En üste kadar hepsi)
                $ancestorsPlusSelf = $node->getAncestorsAndSelf();
                
                // Alt kategorileri (En alta kadar hepsi)
                $descendants = $node->getDescendants();
                
                // Alt kategorileri ve kendisi (En alta kadar hepsi)
                $descendantsPlusSelf = $node->getDescendantsAndSelf();
                  12 gün sonra

                  mgsmus Geçenlerde bir Github kodunu incelerken Model Observer üzerinde updating eventi sonrasında bazı sütunlarda değişiklik yaptı. İşlemin sonunda $model->saveQuietly(); diye bir şey kullandı hocam. Sanırım işlem sonrasında tekrar event oluşmasını engelliyor bu şekilde.
                  Bu senaryoda çözüm olur mu bilmiyorum ama, alternatif bilgi olsun diye buraya bırakmış olayım 🙂

                    BoraN7 Evet ama Laravel 8 için. 6 ve 7 için withoutEvents kullanılması lazım. O yüzden Laravel sürümü sormuşum ama kimse cevap vermeyince cevaplanmadan kalmış. Zaten konu çorba gibi olmuş, artık bu konudan ayrı konular açılırsa daha iyi olur o yüzden konuyu kilitliyorum.

                    mgsmus, tartışmayı kilitledi.