staudenmeir/laravel-adjacency-list, Laravel uygulamalarında recursive (özyinelemeli) Eloquent ilişkileri kurmak için geliştirilmiş bir PHP paketidir. Paket, veritabanı sorgularında Common Table Expressions (CTE) kullanarak ağaç yapısındaki verileri (kategoriler, menüler, organizasyon şemaları vb.) daha verimli ve okunabilir bir şekilde yönetmeyi hedefler. Bu sayede, geleneksel yöntemlere kıyasla daha az sorgu ile hiyerarşik verileri çekebilir ve ilişkisel veritabanlarında özyinelemeli sorguların getirdiği karmaşıklığı azaltabilirsiniz. Paket, Packagist üzerinde 5.8 milyondan fazla indirilmiş ve 1.5 binden fazla favorilenmiştir, bu da topluluk tarafından yaygın olarak benimsendiğini gösterir.
Hangi ihtiyaçlarda değerlendirilebilir?
- Laravel ile geliştirilen ve kategori, menü, organizasyon şeması gibi hiyerarşik verileri yöneten web uygulamaları
- Veritabanında özyinelemeli sorguları optimize etmek ve sorgu sayısını azaltmak isteyen geliştiriciler
- Eloquent ORM üzerinde çalışan ve ağaç yapısındaki verileri ilişkisel olarak modellemek isteyen projeler
Yaygın kullanım alanları
Kategori Ağaçları
E-ticaret sitelerinde ürün kategorileri, blog yazılarında konu kategorileri gibi çok seviyeli kategorileri yönetmek için idealdir. Alt kategorileri ve üst kategorileri tek bir sorguyla çekebilirsiniz.
Menü Yapıları
Dinamik menülerde alt menüleri ve derinlik seviyelerini yönetmek için kullanılabilir. Örneğin, çok seviyeli navigasyon menüleri oluşturmak.
Organizasyon Şemaları
Çalışanların yönetici-alt ilişkilerini modellemek ve organizasyon şemasını görüntülemek için uygundur. Bir çalışanın tüm alt birimlerini veya üst yöneticilerini sorgulamak kolaylaşır.
İncelenmesi gereken noktalar
- Paket, Laravel'in Eloquent ORM'ine özel olarak geliştirilmiştir; bu nedenle yalnızca Laravel projelerinde kullanılabilir.
- CTE desteği, kullanılan veritabanı sürümüne bağlıdır. Örneğin, MySQL 8.0+, PostgreSQL, SQLite 3.8.3+ ve SQL Server gibi sürümlerde CTE desteklenir. Eski sürümlerde uyumluluk sorunları yaşanabilir.
- Paketin kullanımı, mevcut projenin veritabanı yapısına ve Eloquent model tanımlarına bağlıdır. Mevcut bir projeye entegre ederken model ilişkilerinin gözden geçirilmesi gerekebilir.
WordPress.org
Kurulum ve geliştirme notları
Paket, Composer aracılığıyla kurulur. Kurulum sonrası model tanımlarında ilgili trait kullanılarak recursive ilişkiler tanımlanır.
- 1Composer ile paketi projeye ekleyin: composer require staudenmeir/laravel-adjacency-list
- 2İlgili Eloquent modelinde paketin sağladığı trait'i kullanın.
- 3Modelde recursive ilişkiyi tanımlayın (örneğin, parent ve children).
- 4Sorgularınızda recursive ilişkileri kullanarak hiyerarşik verileri çekin.
Paket, geliştiricilere recursive ilişkileri tanımlamak için çeşitli metodlar sunar. CTE kullanımı sayesinde derinlik sınırlaması, alt/üst düğümleri getirme gibi işlemler optimize edilir.
- CTE tabanlı sorgular sayesinde çok sayıda recursive sorgu yerine tek bir sorgu ile hiyerarşi elde edilebilir.
- Alt ve üst düğümleri, derinlik seviyelerini ve ağaç yapısını kolayca sorgulama imkanı.
- Laravel'in Eloquent ORM'i ile uyumlu, mevcut model yapısına entegre edilebilir.
Hazır çözümün ötesinde
Özel geliştirme ne zaman değerlendirilebilir?
ZeplinGo olarak, Laravel projelerinizde hiyerarşik veri yönetimi ihtiyaçlarınızı analiz ediyor, bu paketin veya özel çözümlerin kullanımını birlikte değerlendiriyoruz. Projenizin ölçeğine ve gereksinimlerine göre en uygun yaklaşımı belirleyerek, veritabanı sorgularınızı optimize eden ve bakımı kolay bir yapı kurmanıza yardımcı oluyoruz. Kurumsal Websitesi Paketimiz kapsamında da bu tür ihtiyaçları planlayabiliriz.
Ücretsiz ön çalışma isteyin →Değerlendirme soruları
Bu paket hangi Laravel sürümleriyle uyumludur?
Paketin Packagist sayfasında belirtilen bir uyumluluk bilgisi bulunmamaktadır. Genellikle güncel Laravel sürümleriyle uyumlu olması beklenir, ancak kesin bilgi için paketin dokümantasyonunu incelemek gerekir.
CTE nedir ve neden önemlidir?
CTE (Common Table Expression), SQL'de geçici bir sonuç kümesi tanımlamaya yarar. Recursive sorgularda, bir sorgunun kendi sonucunu referans alarak tekrar etmesini sağlar. Bu paket, CTE kullanarak hiyerarşik verileri daha verimli sorgularla çekmeyi amaçlar.
Bu paket yerine özel bir çözüm geliştirmek mümkün mü?
Evet, ZeplinGo olarak projenizin ihtiyaçlarına göre özel recursive ilişki çözümleri de geliştirebiliriz. Paketin sunduğu özelliklerin yeterli olup olmadığını birlikte değerlendirerek en doğru yaklaşımı belirleriz.