CakePHP scaffolding hasAndBelongsToMany probleem/vraag...

Pagina: 1
Acties:
  • 124 views sinds 30-01-2008
  • Reageer

  • DutchStoner
  • Registratie: Oktober 2005
  • Laatst online: 17-01-2022
UITLEG

Ik probeer een N > M database relatie te bouwen dmv scaffolding in CakePHP (ik ben redelijk nieuw met CakePHP). Helaas loop ik steeds tegen de lamp.

DATABASE LAYOUT

update: wat ik probeer duidelijk te maken heet officieel "self-referencial many-to-many relationship"

In de friends tabel heeft de account_id en de friend_account_id een relatie met id in de accounts tabel. Een account kan dus meerdere friend_accounts hebben.

accounts
id
username


friends
id
account_id
friend_account_id


Afbeeldingslocatie: http://j3rn.org/database.jpg


Hier een voorbeeld van de output van de friends tabel;
idaccount_idfriend_account_id
112
213
323
432

In het bovenstaande geval is;
account 1 bevriend met account 2 en 3
account 2 bevriend met account 3
account 3 bevriend met account 2

CAKEPHP MODELS

PHP: account.php
1
2
3
4
5
6
7
8
9
 

<?php 
class Account extends AppModel 
{ 
 var $name = 'Account'; 
 var $displayField = 'username';
} 
?>


PHP: friend.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 

<?php 
class Friend extends AppModel 
{ 
 var $name = 'Friend';
        var $hasAndBelongsToMany = array('Account' =>
                 array('className'    => 'Account',
                     'conditions'   => '',
                     'order'        => '',
                     'foreignKey'   => 'account_id'
                 )
             );
} 
?>



RESULTAATPROBLEEM
  • Op de add friend pagina zie ik id's ipv account namen. Toch geef ik dit wel op in het Account AppModel.
  • Als ik een nieuwe friend toevoeg dan krijg ik geen dropdown. (zoals hier bij een ander deel op de website wel). Het verschil is dat deze met belongto is opgebouwd ( een N > N relatie, en dus geen N > M)
Mijn gevoel zegt dat ik iets niet goed doe met de $hasAndBelongsToMany. Ik heb al verschillende tutorials doorlopen en snap het nog steeds niet. Kan iemand me helpen?

p.s. is dit voldoende / goede informatie voor een topicstart? Of kan niemand er een touw aan vastknopen?

[ Voor 18% gewijzigd door DutchStoner op 24-04-2007 18:25 ]


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Nou heb ik geen ervaring met cakephp (heb m'n eigen O/R mapper + scaffoldding geschreven) maar snapt dat ding nou niet automagisch dat je friend een foreign key in account heeft? :X
dat zou best ruk zijn namelijk

Stop uploading passwords to Github!


  • DutchStoner
  • Registratie: Oktober 2005
  • Laatst online: 17-01-2022
Normaal snapt ie dat wel. Maar omdat dit een HABTM relatie is moet je dus iets extra's doen... :S

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Ik snap het has and belongs to many concept niet helemaal geloof ik . leg eens uit :?

Verder vind ik dat mensen die 'id' als een primary key gebruiken opgevoed moeten worden trouwens :P
waarom nou wel in je friends tabel een account_id maar niet in je account tabel een account_id ? Da's toch veel overzichtelijker ook :?
(mijn eigen mapper gebruikt dit concept om automagisch de relaties (foreign, 1:1 en many) te analyseren. misschien vindt cakephp dat ook leuker?

[ Voor 77% gewijzigd door SchizoDuckie op 24-04-2007 14:03 ]

Stop uploading passwords to Github!


  • DutchStoner
  • Registratie: Oktober 2005
  • Laatst online: 17-01-2022
SchizoDuckie schreef op dinsdag 24 april 2007 @ 13:59:
Ik snap het has and belongs to many concept niet helemaal geloof ik . leg eens uit :?
Hier zie je ongeveer wat 't HABTM concept is. En hier ze je ook direct dat de naamgeving die ik gebruikt heb goed moet zijn.
  • id = altijd de primary key van een tabel
  • tabelnaam_id = altijd een relatie die verwijst naar de id van een andere tabel (nl de tabelnaam)
Maar er gaat hier dus iets fout. Dus 't moet ergens aan liggen.. Ik zal nog eens naar wat documentatie opzoek gaan om er zeker van te weten dat ik de database goed heb opgezet.

[ Voor 25% gewijzigd door DutchStoner op 24-04-2007 14:11 ]


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

dat daar vertelt je toch gewoon dat dit zou moeten werken dan :?

PHP:
1
2
3
4
5
6
7
8
9
class Account extends AppModel{
   var $name="Account";
   var $hasAndBelongsToMany = array("Friend");
}

class Friend extends AppModel{
   var $name="Friend";
   var $hasAndBelongsToMany = array("Account");
}

:?

Stop uploading passwords to Github!


  • DutchStoner
  • Registratie: Oktober 2005
  • Laatst online: 17-01-2022
Dit werkt dus niet. Het geeft exact het zelfde resultaat als de code die ik gebruik...Ik denk dat het verschil is dat mijn database iets anders is opgebouwd dan de tutorial waarna ik link. Bij mij is in de friend tabel het acount_id en het friend_account_id beide gelinkt aan de id van de account tabel.

Strict volgens de naamspecs zouden beide velden account_id moeten heten.. Maar dat mag natuurlijk niet binnen 1 tabel.

[ Voor 16% gewijzigd door DutchStoner op 24-04-2007 14:36 ]


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

DutchStoner schreef op dinsdag 24 april 2007 @ 14:29:
Dit werkt dus niet. Het geeft exact het zelfde resultaat als de code die ik gebruik...Ik denk dat het verschil is dat mijn database iets anders is opgebouwd dan de tutorial waarna ik link. Bij mij is in de friend tabel het acount_id en het friend_account_id beide gelinkt aan de id van de account tabel.

Strict volgens de naamspecs zouden beide velden account_id moeten heten.. Maar dat mag natuurlijk niet binnen 1 tabel.
Nu ben k je echt helemaal kwijt... Waarom heb je een account_id en een friend_account_id als ze hetzelfde zijn :?

Stop uploading passwords to Github!


  • DutchStoner
  • Registratie: Oktober 2005
  • Laatst online: 17-01-2022
Ik heb even snel een overzicht van de database getekend... Mischien is 't dan duidelijker. maw; een account kan meerdere friend_accounts hebben.

Afbeeldingslocatie: http://j3rn.org/database.jpg

[ Voor 17% gewijzigd door DutchStoner op 24-04-2007 15:05 ]


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

DutchStoner schreef op dinsdag 24 april 2007 @ 15:02:
Ik heb even snel een overzicht van de database getekend... Mischien is 't dan duidelijker. maw; een account kan meerdere friend_accounts hebben.

[afbeelding]
Sorry maar dit maakt niet veel duidelijker, het zegt me 2 dingen:

• Óf dit is een recursieve relatie :?
• Óf je hebt hier een koppeltabel nodig.

Stop uploading passwords to Github!


  • DutchStoner
  • Registratie: Oktober 2005
  • Laatst online: 17-01-2022
Volgens mij is de friends tabel nu juist de koppeltabel :S

Hier een voorbeeld van de output van de friends tabel;
idaccount_idfriend_account_id
112
213
323
432

In het bovenstaande geval is;
account 1 bevriend met account 2 en 3
account 2 bevriend met account 3
account 3 bevriend met account 2

Zowel de account_id en friend_account_id hebben een relatie met de id in de account tabel...

Mijn excuses voor de onervaren en omslachtige manier van uitleggen. Ik weet niet altijd hoe ik 't beestje bij zijn naam moet noemen.

[ Voor 23% gewijzigd door DutchStoner op 24-04-2007 15:40 ]


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Aaaah jah nu begrijp ik je inderdaad :) ik ben ook niet helemaal helder vandaag 8)7

De structuur komt me een beetje vreemd over, maar het is volgens mij wel de juiste manier.
Dan vrees ik idd niet dat ik je hier mee verder kan helpen...

[ Voor 79% gewijzigd door SchizoDuckie op 24-04-2007 15:43 ]

Stop uploading passwords to Github!


  • DutchStoner
  • Registratie: Oktober 2005
  • Laatst online: 17-01-2022
Ach, die dagen hebben we allemaal wel eens. In ieder geval bedankt voor het meedenken.!

Mischien komt er vanavond nog iemand langsfietsen die er iets over kan vertellen.

[ Voor 33% gewijzigd door DutchStoner op 24-04-2007 15:46 ]

Pagina: 1