mehmetkose wrote:Selamlar, 2.5 yıl nosql'e alışınca laravel eloquent'da sudan çıkmış balığa döndüm. Tüm öğleden sonramı bu basit yapıyı düşünerek geçirdim ve şu an itibariyle bir "laravelce" çözüm yöntemim yok.
Ders, Kurs, Yetenek tablolarım var. Kurs ve Ders arasında hali hazırda ManyToMany ilişki var.
Şimdi Derslere yetenek ataması yapacağım, fakat bu yetenekler her kurs için farklı olabiliyor.
yani, 'dersin kursa ait yetenekleri' şeklindeki bir yapıyı kurmam lazım.
ders - yetenek arasında many to many yemiyor haliyle. aynı kursa aynı
has many through'a baktım ama işimi görmüyor gibi şu durumda.
düz sql kullanıyor olsam
ders_id
kurs_id
yetenek_id
bunları tek tabloya yazardım ve kurs, ders idsi şu olanları getir deyip yetenekleri alırdım.
ama laravel eloquent'da yapıyı nasıl kurarım bilmiyorum.
açıklayıcı olmamış ise görsel çizebilirim sanki.
Bahsettiğiniz tabloları kolonları ve ilişki mantığını yazarsanız daha net cevaplar almanız olasıdır.
SQL tasarlerken veri tekrarından kaçınmak lazım.
Dersin bir den fazla yeteneği mi var?
Muhtemelen kurs ile ders arasında one to many lişikisi vardır.
Ders ile Yeteneğinde uzaktan bakınca yine one to many ilişkisi vardır..
foreach($kurs->dersler() as $ders) {
echo $ders->isim; // matematik
}
Yeteneklere erişmek gerekirse.
foreach($kurs->dersler() as $ders) {
echo $ders->yetenekler; // Collection Nesnesi | null
}
Eğer hem kurslara hem de derslere yetenek eklenecekse
Kurslar
id - integer
isim - string
Dersler
id - integer
isim - string
Yetenekler
id - integer
isim - string
yeteneksel_id - integer
yeteneksel_tur - string
Bu ilişkiye 'Polymorphic Relations' ilşki deniyor. Türkçesinden emin değilim. Bu ilişki türünün en büyük avantajı --yukarıdan örnek verelim -- 'yetenekler' tablosuna çok sayıda tabloyu kolaylıkla bağlayabilirsiniz. Ve bunu yaparkende migration (veritabanında değişiklik) yapmak zorunda kalmazsınız. Wordpress'deki tags mantığına çok benzer.. Bu ilşkide her yeni bir tablo için refesans(sql'da) vermenize gerek kalmıyor.
SQL'da ve ilişkisel veritabanı kavraması zordur. Eloquent'de işin içine girince biraz daha zorlaşır. Ama kullanım konforu her şeye rağmen değer dedirtitirir. Laravel dökümanlarını, bir projede deneyin, mantığını anca öğle çözerseniz..