[cakephp] Gegevens uit tabel met andere controller

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • LocoShady
  • Registratie: Mei 2003
  • Laatst online: 21-09 21:33
Hoi ik ben net met cakePHP begonnen echter is het een beetje een geworstel omdat niet alles netjes is gedocumenteerd. Nu ben ik tegen een probleem aangelopen waarvan ik niet snap hoe ik het moet oplossen, of dat ik het juist anders moet aanpakken.

De situatie is als volgt:
Afbeeldingslocatie: http://www.essek.nl/fok/cake.jpg

nu wil ik dus op de pagina:

http://localhost/subcategories/view/1 informatie ophalen uit de tabel categories. Ik wil namelijk de naam weten die bij het id 1 van categories hoort. Hoe moet ik dit nu oplossen? en kan (hoort) het wel op deze manier?

bvd :)

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
Waarom maak je überhaupt 2 databases (of zijn het tabellen die als databases zijn vormgegeven??) aan voor iets wat hetzelfde is? Een categorie is toch een categorie, dat hij toevallig een subcategorie is van een andere categorie doet daar toch weinig aan af, de informatie over een categorie blijft hetzelfde toch..

Verder ken ik cakephp niet zo goed, maar ik neem aan dat je wel met de database kan communiceren via een database abstractie laag of een ORM (Object Relational Mapper). Dus in je PHP file het juiste database object ophalen en dan de informatie ophalen van de gewenste categorie. Dit moet toch wel mogelijk zijn in cakephp.

Dit topic hoort trouwens ook in PRG thuis en niet in WEB.

[ Voor 4% gewijzigd door Borizz op 19-10-2008 18:59 ]

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • LocoShady
  • Registratie: Mei 2003
  • Laatst online: 21-09 21:33
Borizz schreef op zondag 19 oktober 2008 @ 18:58:
Waarom maak je überhaupt 2 databases (of zijn het tabellen die als databases zijn vormgegeven??) aan voor iets wat hetzelfde is? Een categorie is toch een categorie, dat hij toevallig een subcategorie is van een andere categorie doet daar toch weinig aan af, de informatie over een categorie blijft hetzelfde toch..

Verder ken ik cakephp niet zo goed, maar ik neem aan dat je wel met de database kan communiceren via een database abstractie laag of een ORM (Object Relational Mapper). Dus in je PHP file het juiste database object ophalen en dan de informatie ophalen van de gewenste categorie. Dit moet toch wel mogelijk zijn in cakephp.

Dit topic hoort trouwens ook in PRG thuis en niet in WEB.
Zijn idd tabellen die ik als databases heb weergegeven. Daarnaast kan je uiteraard ook communiceren met de juiste tabel echter staat nergens omschreven wat de goede manier is om dit te doen vanuit een andere controller, ik hoop dat er iemand is die dus kan uitleggen hoe dit met cakePHP gedaan moet worden.


ps. gaarne even kan verplaatsen naar PRG, mijn excuses :).

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
* RobIII aanloop neemt...

WEB >> PRG


GOAAAAAAL!

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
Misschien moet je de documentatie (het cookbook), toch eens even beter doornemen ik heb namelijk in 2 minuten de oplossing gevonden (nog minder tijd dan het aanmaken van een topic hier)..

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • LocoShady
  • Registratie: Mei 2003
  • Laatst online: 21-09 21:33
Borizz schreef op zondag 19 oktober 2008 @ 19:42:
Misschien moet je de documentatie (het cookbook), toch eens even beter doornemen ik heb namelijk in 2 minuten de oplossing gevonden (nog minder tijd dan het aanmaken van een topic hier)..
dus stel dat ik in de controller het volgende doe:

function view($id)
{
$this->Subcategory->Category->find('name');
}

hoe kan ik dan de name van category echo'en in de .ctp ?

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
Ik zou nogmaals zeggen check de handleiding, die ziet er best uitgebreid uit namelijk. Probeer zelf ook eens wat en check ook PHP.net indien je ergens niet uitkomt.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • LocoShady
  • Registratie: Mei 2003
  • Laatst online: 21-09 21:33
Borizz schreef op zondag 19 oktober 2008 @ 20:12:
Ik zou nogmaals zeggen check de handleiding, die ziet er best uitgebreid uit namelijk. Probeer zelf ook eens wat en check ook PHP.net indien je ergens niet uitkomt.
ipv met de welbekende handleidingen te gooien zou je me ook kunnen helpen en als je daar te lui voor bent mag je ook met je RTFM's in andere topic's gaan strooien.

ben wel bekend met PHP.net en ook met het cookbook ik kom er in dit geval alleen niet uit vandaar dat ik ook dit topic geplaatst heb met de vraag om wat hulp met een voorzetje. (en niet gewoon een link naar een handleiding die ik al diverse malen heb geraadpleegd) Als ik er namelijk met de handleiding uit was gekomen had ik hier geen topic geplaatst.

Als iemand dus zo vriendelijk zou willen zijn om mij een stukje op weg te helpen, moeilijk kan het niet zijn ik kom er alleen even niet uit.

bvd, :)

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
Als wij je de code voorkauwen dan snap je het de volgende keer nog niet, het doel van dit forum is juist de mensen een zetje in de goede richting te geven en niet gelijk de oplossing te geven. Je geeft niet echt goed aan wat je dan wel geprobeerd hebt en wat er nu precies misgaat. Je hebt het over een .ctp file, via de handleiding van cake ben ik erachter dat dat een cake template is, maar dat moet je ook maar net weten.

Ik kan me ook niet voorstellen dat je de handleiding goed gelezen heeft, want er staat ook gewoon een hoofdstuk in over de templates en hoe je daar variabelen in kan plaatsen. En als dit niet de oplossing voor je probleem is dan zal je de vraag beter moeten formuleren.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • LocoShady
  • Registratie: Mei 2003
  • Laatst online: 21-09 21:33
Borizz schreef op zondag 19 oktober 2008 @ 21:11:
Als wij je de code voorkauwen dan snap je het de volgende keer nog niet, het doel van dit forum is juist de mensen een zetje in de goede richting te geven en niet gelijk de oplossing te geven. Je geeft niet echt goed aan wat je dan wel geprobeerd hebt en wat er nu precies misgaat. Je hebt het over een .ctp file, via de handleiding van cake ben ik erachter dat dat een cake template is, maar dat moet je ook maar net weten.

Ik kan me ook niet voorstellen dat je de handleiding goed gelezen heeft, want er staat ook gewoon een hoofdstuk in over de templates en hoe je daar variabelen in kan plaatsen. En als dit niet de oplossing voor je probleem is dan zal je de vraag beter moeten formuleren.
Ik ging er dan ook van uit dat als iemand geen ervaring heeft met cake hij weg zou blijven uit dit topic. Het is ditmaal echter al gelukt

door dat ik dit al in het model had staan:
PHP:
1
2
3
4
5
6
7
8
    var $belongsTo = array(
            'Category' => array('className' => 'Category',
                        'joinTable' => 'categories',
                        'foreignKey' => 'category_id',
                        'associationForeignKey' => 'id',
                        'unique' => true
            )
    );


bleek de info die ik nodig had al in de array te hebben staan:
PHP:
1
<?php echo $subcategories['0']['Category']['name'] ?>


niet het antwoord waar ik op gehoopt had, maar voor nu voldoende.

Om nog even op je reactie te reageren:
Ik vind het knap van je dat je kan oordelen dat als iets voorgekauwd wordt ik het de volgende keer niet snap. Ik leer over het algemeen een stuk sneller van voorbeelden dan van handleidingen, dit is, ben ik van mening persoonsgebonden en dat is dus waarschijnlijk een verkeerde denkwijze die je jezelf hebt aangeleerd.

Aangeven wat ik in dit specifieke geval al had gedaan was zeer lastig en voor deze vraag ook niet heel relevant omdat ik de methode wilde weten hoe iets moest (voor iemand die ervaring heeft met cakephp en dus de juiste methode weet, kan het aan de kont roesten wat ik al heb gedaan.)
Daarnaast is het duidelijk niet aan jouw om te beoordelen of ik de handleiding goed gelezen heb, vooral omdat met iets als dit je de handleiding wel helemaal gelezen kan hebben (zoals ik) maar als je dan ook daadwerkelijk iets wilt toepassen het terug moet zoeken en soms dus iets over het hoofd kan zien of iets ondanks de duidelijk uitleg niet snapt.
En zeg nou zelf je hebt niet eens de moeite gedaan om een goede tip te geven behalve met de gebruikelijke handleiding te smijten (hier heeft geen hond wat aan die hier komt). Ik ga er namelijk vanuit dat iemand die hier komt de handleidingen al heeft doorgenomen en een andere tip nodig heeft dan een handleiding. Dit hoeft geen kant en klare code te zijn maar wel iets anders (of anders uitgelegd) dan in de handleiding staat.

Als je iemand niet denkt te kunnen helpen, kun je beter je energie in een ander topic steken dan altijd maar te gaan gooien met handleidingen.

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
Volgens mij heb ik je nog aardig proberen te helpen voor iemand die cakephp nog nooit gebruikt heeft. Ik kan me ook niet voorstellen dat het voor iemand die wel ervaring heeft met cakephp gelijk duidelijk was wat je probleem nu was..

Voor je overige commentaar op mijn posts verwijs ik graag door naar de algemene gedragsregels op dit forum.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • LocoShady
  • Registratie: Mei 2003
  • Laatst online: 21-09 21:33
Borizz schreef op zondag 19 oktober 2008 @ 22:24:
Volgens mij heb ik je nog aardig proberen te helpen voor iemand die cakephp nog nooit gebruikt heeft. Ik kan me ook niet voorstellen dat het voor iemand die wel ervaring heeft met cakephp gelijk duidelijk was wat je probleem nu was..

Voor je overige commentaar op mijn posts verwijs ik graag door naar de algemene gedragsregels op dit forum.
dankje maar dat is echt niet nodig
Geregistreerd op 24 mei 2003

Acties:
  • 0 Henk 'm!

  • ShadowrunR
  • Registratie: Maart 2002
  • Laatst online: 18-05 20:55
Als je net begint is het handig om de blog tutorial eens te lezen op cakephp.org, die handelt alle basiszaken af: http://book.cakephp.org/view/219/Blog.

verder kun je andere models gebruiken in je controller door het volgende te plaatsen in je controller:
PHP:
1
var $uses = array('Category', 'Subcategory');

Dan kan je je data oproepen op deze manier:
PHP:
1
2
$categories = $this->Category->find('all');
$this->set('categories', $categories);

En in je view doe je dan het volgende:
PHP:
1
2
3
foreach ($categories as $category): 
    echo $category['Category']['title'] . '<br/>';
endforeach;

[ Voor 32% gewijzigd door ShadowrunR op 20-10-2008 00:16 ]


Acties:
  • 0 Henk 'm!

  • LocoShady
  • Registratie: Mei 2003
  • Laatst online: 21-09 21:33
ShadowrunR schreef op maandag 20 oktober 2008 @ 00:10:
Als je net begint is het handig om de blog tutorial eens te lezen op cakephp.org, die handelt alle basiszaken af: http://book.cakephp.org/view/219/Blog.

verder kun je andere models gebruiken in je controller door het volgende te plaatsen in je controller:
PHP:
1
var $uses = array('Category', 'Subcategory');

Dan kan je je data oproepen op deze manier:
PHP:
1
2
$categories = $this->Category->find('all');
$this->set('categories', $categories);

En in je view doe je dan het volgende:
PHP:
1
2
3
foreach ($categories as $category): 
    echo $category['Category']['title'] . '<br/>';
endforeach;
Had de blog tutorial inderdaad al doorlopen, maar dit is precies wat ik zocht idd _/-\o_
Nu is het me helemaal duidelijk :)

Acties:
  • 0 Henk 'm!

Verwijderd

Ik wil geen oude koeien uit de sloot halen, maar voor mensen die dit toevallig lezen zoals ik, om ervaringen over CakePHP op te doen, reageer ik hier toch nog even stiekem op.

Het gebruik van $uses in de Controller(s) is sterk afgeraden. Sterker nog, het is eigenlijk ook helemaal niet nodig. De Model die bij de Controller hoort wordt automagisch geïnstantieerd (lees: UsersController instantieerd User Model) en het is mogelijk om via associations Models aan te roepen.

PHP:
1
$this->User->Group->find('all');


Models die op geen enkele manier geassocieerd zijn, kunnen geïnstantieerd worden met behulp van de ClassRegistry. Dit is een statische class en kan dan als volgt aangeroepen worden:

PHP:
1
2
$this->ModelName = ClassRegistry::init('ModelName');
$this->ModelName->find('all');


Het enige waar je $uses voor zou kunnen gebruiken is voor een Controller die geen Models hoeft te laden.
PHP:
1
public $uses = array();


Deze informatie is ook in het Cookbook te vinden en op Blogs van andere gebruikers. Daarnaast kan je ook altijd hulp vragen in het #cakephp kanaal op irc.freenode.net.

[ Voor 3% gewijzigd door Verwijderd op 07-01-2009 12:09 ]


Acties:
  • 0 Henk 'm!

  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
Verwijderd schreef op woensdag 07 januari 2009 @ 12:02:
Ik wil geen oude koeien uit de sloot halen, maar voor mensen die dit toevallig lezen zoals ik, om ervaringen over CakePHP op te doen, reageer ik hier toch nog even stiekem op.

Het gebruik van $uses in de Controller(s) is sterk afgeraden. Sterker nog, het is eigenlijk ook helemaal niet nodig. De Model die bij de Controller hoort wordt automagisch geïnstantieerd (lees: UsersController instantieerd User Model) en het is mogelijk om via associations Models aan te roepen.

PHP:
1
$this->User->Group->find('all');


Models die op geen enkele manier geassocieerd zijn, kunnen geïnstantieerd worden met behulp van de ClassRegistry. Dit is een statische class en kan dan als volgt aangeroepen worden:

PHP:
1
2
$this->ModelName = ClassRegistry::init('ModelName');
$this->ModelName->find('all');


Het enige waar je $uses voor zou kunnen gebruiken is voor een Controller die geen Models hoeft te laden.
PHP:
1
public $uses = array();


Deze informatie is ook in het Cookbook te vinden en op Blogs van andere gebruikers. Daarnaast kan je ook altijd hulp vragen in het #cakephp kanaal op irc.freenode.net.
Ben het niet met je eens!
Uses is ook handig als je een controller hebt die ook veel gebruik maakt van een andere model.
Op die manier hoef je niet telkens bij elke action de model te laden!

Daarnaast ipv classregistry is het volgende in een controller is voldoende hoor:
PHP:
1
2
$this->loadModel('ModelName');
$this->ModelName->find('all');

[ Voor 5% gewijzigd door steffex op 07-01-2009 13:26 . Reden: toevoeging ]


Acties:
  • 0 Henk 'm!

Verwijderd

Als je een Model in de $uses array zet die al geassocieerd met (uiteindelijk) het hoofd Model van de Controller laad je hem twee maal in. Een keer in de controller zelf en eenmaal in de model. (slechte performance dus)

loadModel() zal inderdaad ook werken... maar die gebruikt een hoop overbodige code om uiteindelijk alsnog de ClassRegistry aan te roepen. (wederom slechte performance)

ik kan het anders ook in 1 regel, als we een wedstrijdje doen wie het kortste het voor elkaar kan krijgen:
PHP:
1
$results = ClassRegistry::init('ModelName')->find('all');


p.s. elke action een andere model laden? Je kan hem ook declareren in de beforeFilter() callback... Maar als je een andere model in bijna elke action wil gaan gebruiken, moeten ze toch op één of andere manier geassocieerd zijn, of je werkt in de verkeerde controller.

[ Voor 17% gewijzigd door Verwijderd op 08-01-2009 00:35 ]

Pagina: 1