Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[CakePHP/MySQL] Join table in een mysql query in CakePHP?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben sinds kort aan het expirimenteren met CakePHP.
Echter nu loop ik tegen iets aan, is het mogelijk om een JOIN te gebruiken in een query?

Ik maak gebruik van de findAll functie van Cake:

findAll("branche = 'Adviesbureaus'",null,"`Bedrijven`.`bedrijfsnaam` ASC");

Hoe zou ik de JOIN hierop toe kunnen passen?

  • 418O2
  • Registratie: November 2001
  • Laatst online: 19:27
Heeft CakePHP geen active records achtig iets met koppelingen?

Verwijderd

Topicstarter
Ik weet niet. Ik dacht dat je gewoon een JOIN kon gebruiken.
Maar heb tot nog toe niets kunnen vinden.

Wat bedoel je met active records achtig iets?

Verwijderd

CakePHP gebruikt inderdaad een active record pattern. Volgens mij joint cake automatisch tables als je de relaties hebt aangegeven in de juiste model klassen ($hasMany, $belongsTo, etc) Je kunt bij de findAll() aangeven tot welke diepte cake relaties moet joinen.
When the $recursive option is set to an integer value greater than 1, the findAll() operation will make an effort to return the models associated to the ones found by the findAll(). If your property has many owners who in turn have many contracts, a recursive findAll() on your Property model will return those associated models.

Verwijderd

Topicstarter
dankjewel..

ik zal dit even goed doornemen.

Verwijderd

Topicstarter
Verwijderd schreef op dinsdag 26 februari 2008 @ 09:28:
CakePHP gebruikt inderdaad een active record pattern. Volgens mij joint cake automatisch tables als je de relaties hebt aangegeven in de juiste model klassen ($hasMany, $belongsTo, etc) Je kunt bij de findAll() aangeven tot welke diepte cake relaties moet joinen.


[...]
Ik heb het even doorgenomen. Ik begrijp het echter nog niet helemaal.
In manual stond niet veel voorbeeld code, heb jij toevallig wat voorbeeldjes voor mij?
Dat is een stuk handiger voor mij om het te begrijpen..

Verwijderd

Ik zal vanmiddag een voorbeeldje posten. Ik begrijp die mensen die de manual maken ook niet helemaal hoor, waarom maken ze een 'Tutorial' die zo triviaal is dat je er geen zak aan hebt.

  • 418O2
  • Registratie: November 2001
  • Laatst online: 19:27
Google link

daar al in gekeken?

Verwijderd

Topicstarter
Verwijderd schreef op dinsdag 26 februari 2008 @ 10:07:
Ik zal vanmiddag een voorbeeldje posten. Ik begrijp die mensen die de manual maken ook niet helemaal hoor, waarom maken ze een 'Tutorial' die zo triviaal is dat je er geen zak aan hebt.
Jah ik vind die manual erg slecht.
Wat erg jammer is, want CakePHP lijkt in eerste instantie toch erg goed te zijn.

Ik kijk uit naar je voorbeeld.

Verwijderd

Topicstarter
Ja had ik uiteraard ook op google gekeken. maar niet op de zoekwoorden die jij hierboven aangaf.
Zal eens even kijken nog..

Verwijderd

Een beetje later dan ik had beloofd maar beter laat dan nooit.

Neem bijvoorbeeld een simpel voorbeeldje met drie tabellen: posts, comments en users. Relaties tussen die tabellen zijn als volgt, posts en comments zijn van een user en een comment hoort bij een post. Voor elk van deze tabellen maak je een Model klasse en daarin geef je de relaties aan.
De volgende stukjes code heb ik niet kunnen testen, maar het geeft wel een duidelijk idee denk ik.

Post model
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Post extends AppModel {   
    public $belongsTo = array(
        'Author' => array(
            'className' => 'User',
            'conditions' => '',
            'order' => '',
            'dependent' => false,
            'foreignKey' => 'user_id',
        )
    );  
    public $hasMany = array(
        'Comments' => array(
            'className' => 'Comment',
            'order' => 'Comments.created DESC'
        )
    );  
}


Comment model
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Comment extends AppModel {
    public $belongsTo = array(
        'Author' => array(
            'className' => 'User',
            'conditions' => '',
            'order' => '',
            'dependent' => false,
            'foreignKey' => 'user_id',
        ),
        'Post' => array(
            'className' => 'Post',
            'conditions' => '',
            'order' => '',
            'dependent' => true,
            'foreignKey' => 'post_id',
        )
    );
}


Vervolgens kun je bijvoorbeeld ergens in een Controller je laatste 10 posts selecteren:
PHP:
1
$this->set('posts', $this->Post->findAll('', null, 'created DESC', 10, 0, 1));

Overigens ben ik er net achter dat die laatste '1' standaard is.

Tenslotte kun je de gegevens op de volgende manier in je views gebruiken (normaal gesproken doe je er wat html omheen):

PHP:
1
2
3
4
5
6
<? foreach($posts as $post): ?>
    <?= $post['Post']['title']; ?>
    <? foreach($post['Comments'] as $comment): ?>
        <?= $comment['body']; ?>
    <? endforeach; ?>
<? endforeach; ?>

Een print_r() geeft misschien een duidelijker inzicht in hoe die variabele $posts is opgebouwd.

Met dit voorbeeldje en de uitleg in de CakePHP manual moet je er wel uit komen. Succes ermee!
Pagina: 1