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!