Goed, naar lang getwijfeld te hebben toch maar besloten om wat hulp in te roepen. Ik ben onlangs begonnen met Laravel en probeer dit werkend te krijgen met een database. In het onderstaande figuur zie je een versimpeld EER diagram.

Voor het overzicht heb ik alle andere kolommen er even uit gehaald. Via SQL kan ik hiermee alles benaderen, maar dit krijg ik nog niet voor elkaar met Eloquent. Ik heb diverse relaties gelegd en sommige dingen werken wel en anderen niet.
Via tinker heb ik verschillende dingen lopen en ik kom er niet meer uit.De reden dat ik het nog niet voor elkaar krijg is omdat ik nog niet 100% snap hoe Eloquent werkt bij ingewikkelde (en minder ingewikkelde
) gevallen. Dit ondanks de boeken van Dale Reese, de documentatie van Laravel en het boek EasyLaravel.
Een aantal zaken werken wel, laat ik eerst uitleggen wat wel gelukt is.
* Users belongsToMany Clubs en vice-versa (n:n via pivottable club_user). Dit werkt, via Eloquent kan ik CRUD acties uitvoeren.
* Clubs haveMany Teams en Team belongsTo Club (n:1). Ook hierbij kan ik CRUD acties uitvoeren
* Teams belongsToMany Seasons en vice-versa (n:n via pivottable season_team) Ook hierbij kan ik CRUD acties uitvoeren
Het lukt mij ook om via Teams::with('Season', 'Club') om een lijst te krijgen van de teams met de bijbehorende seasons en clubs. Het lukt me niet om via Seasons alle teams & clubs te krijgen, maar ik denk dat dit via een hasManyThrough moet. Wat ik ook probeer, ik krijg het niet voor elkaar.
Dan de overige problemen. Zoals is te zien is de season_team tabel heel belangrijk, deze koppelt namelijk de spelers aan een bepaalde team/seizoens combinatie. Daarnaast koppelt het ook de staffmembers (coach), de wedstrijden en de trainingen.
Deze relaties zijn allemaal 1:n (een wedstrijd hoort bij 1 seizoen/team combo, maar een seizoen/team combo heeft meerdere wedstrijden). Het lijkt qua Eloguent heel simpel maar ik krijg het niet voor elkaar.
De volgende stap is het toevoegen van spelers/staffmembers. Deze hebben een 1:n koppeling met users: een speler is 1 user (belongsTo), maar een user kan speler zijn van meerdere team/season combinaties (hasMany). Hetzelfde geldt voor staffmembers.
Mijn vraag is dan ook, hoe leg ik de relaties op de juiste manier vast? Volgens mij heb ik me goed aan de eisen van Laravel gehouden mbt naamgeving (meervoud, enkelvoud, alfabetische volgorde etc) . Ik probeer terugkoppeling te krijgen via ->toSQL() om zo de query te zien. Dit lukt soms wel, en vaak niet. Ik denk daroom dat mijn relaties niet kloppen. Het is nu zo verleidelijk om via DB::raw alles binnen te trekken, maar dan leer ik het nooit.
Ik wil geen lappen code ontvangen maar vooral begrijpen hoe bepaalde dingen werken en dan vooral uitgaande van de season_team tabel omdat deze de sleutel is voor het onsluiten van de rest van de data.
Voorbeeld: hoe krijg ik van een player een overzicht voor welke cluib in welke teams/seizoen combinatie hij heeft gespeeld?
Wat weet ik wel:
* hasOne en belongsTo zijn een koppel voor 1:1 relaties.
* hasMany and belongsTo zijn een kopel voor n:1 relaties.
* belongsToMany is voor alle n:n relaties.
* Met de belongsTo en belongsToMany geef je aan dat de foreign key in deze tabel zit. hasOne en hasMany geven aan dat deze tabel de foreign key niet heeft.

Voor het overzicht heb ik alle andere kolommen er even uit gehaald. Via SQL kan ik hiermee alles benaderen, maar dit krijg ik nog niet voor elkaar met Eloquent. Ik heb diverse relaties gelegd en sommige dingen werken wel en anderen niet.
Via tinker heb ik verschillende dingen lopen en ik kom er niet meer uit.De reden dat ik het nog niet voor elkaar krijg is omdat ik nog niet 100% snap hoe Eloquent werkt bij ingewikkelde (en minder ingewikkelde
Een aantal zaken werken wel, laat ik eerst uitleggen wat wel gelukt is.
* Users belongsToMany Clubs en vice-versa (n:n via pivottable club_user). Dit werkt, via Eloquent kan ik CRUD acties uitvoeren.
* Clubs haveMany Teams en Team belongsTo Club (n:1). Ook hierbij kan ik CRUD acties uitvoeren
* Teams belongsToMany Seasons en vice-versa (n:n via pivottable season_team) Ook hierbij kan ik CRUD acties uitvoeren
Het lukt mij ook om via Teams::with('Season', 'Club') om een lijst te krijgen van de teams met de bijbehorende seasons en clubs. Het lukt me niet om via Seasons alle teams & clubs te krijgen, maar ik denk dat dit via een hasManyThrough moet. Wat ik ook probeer, ik krijg het niet voor elkaar.
Dan de overige problemen. Zoals is te zien is de season_team tabel heel belangrijk, deze koppelt namelijk de spelers aan een bepaalde team/seizoens combinatie. Daarnaast koppelt het ook de staffmembers (coach), de wedstrijden en de trainingen.
Deze relaties zijn allemaal 1:n (een wedstrijd hoort bij 1 seizoen/team combo, maar een seizoen/team combo heeft meerdere wedstrijden). Het lijkt qua Eloguent heel simpel maar ik krijg het niet voor elkaar.
De volgende stap is het toevoegen van spelers/staffmembers. Deze hebben een 1:n koppeling met users: een speler is 1 user (belongsTo), maar een user kan speler zijn van meerdere team/season combinaties (hasMany). Hetzelfde geldt voor staffmembers.
Mijn vraag is dan ook, hoe leg ik de relaties op de juiste manier vast? Volgens mij heb ik me goed aan de eisen van Laravel gehouden mbt naamgeving (meervoud, enkelvoud, alfabetische volgorde etc) . Ik probeer terugkoppeling te krijgen via ->toSQL() om zo de query te zien. Dit lukt soms wel, en vaak niet. Ik denk daroom dat mijn relaties niet kloppen. Het is nu zo verleidelijk om via DB::raw alles binnen te trekken, maar dan leer ik het nooit.
Ik wil geen lappen code ontvangen maar vooral begrijpen hoe bepaalde dingen werken en dan vooral uitgaande van de season_team tabel omdat deze de sleutel is voor het onsluiten van de rest van de data.
Voorbeeld: hoe krijg ik van een player een overzicht voor welke cluib in welke teams/seizoen combinatie hij heeft gespeeld?
Wat weet ik wel:
* hasOne en belongsTo zijn een koppel voor 1:1 relaties.
* hasMany and belongsTo zijn een kopel voor n:1 relaties.
* belongsToMany is voor alle n:n relaties.
* Met de belongsTo en belongsToMany geef je aan dat de foreign key in deze tabel zit. hasOne en hasMany geven aan dat deze tabel de foreign key niet heeft.
[ Voor 3% gewijzigd door Schonhose op 03-08-2015 19:09 ]
"The thing under my bed waiting to grab my ankle isn't real. I know that, and I also know that if I'm careful to keep my foot under the covers, it will never be able to grab my ankle." - Stephen King
Quinta: 3 januari 2005