2017-08-31 1 views
1

Je viens de commencer à apprendre cakephp3, alors s'il vous plaît excusez-moi pour quelque chose de mal. J'ai donc trois tables appelées Utilisateurs, Projets et Evénements, donc la relation est comme, un utilisateur peut hasmany projets et un projet peut avoir beaucoup d'événements.comment afficher les lignes associées aux utilisateurs connectés

si j'accéder à l'URL de base

testap/événements

Je veux que ces événements apparaissent dans la liste qui appartient à l'utilisateur connecté. Remarque: La table d'événements n'a que l'ID du projet et non l'ID utilisateur et la table du projet a l'ID utilisateur.

Tenir compte des scénarios suivants

Projcts Tableau

ID User_id 
1 1 
2 1 
3 2 
4 3 

Table des événements

ID Project_id 
1 1 
2 1 
3 1 
4 2 
5 2 
6 3 
7 4 

Je veux seulement afficher 1to5 événements comme ils appartiennent à l'utilisateur connecté (par exemple l'utilisateur avec l'ID 1 a ouvert une session)

Dites-moi comment puis-je y parvenir?

Merci à l'avance

+0

Cela devrait vous aider à https://book.cakephp.org/2.0/en/models/associations-linking-models- together.html –

+0

Il a dit gâteau 3. Ce serait probablement une meilleure option [Récupération des données] (https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html) – styks

Répondre

1

Le nouveau gâteau 3 ORM est fantastique pour quelque chose comme ça.

// You can replace $this->Users with TableRegistry::get('users') 
// if not in the users controller 
$user = $this->Users->find($this->Auth->user('id'), [ 
    'contain' => [ 
     'Projects.Events' 
    ] 
]); 

Vous pouvez obtenir vos événements comme celui-ci

$user->projects[0]->events; 

Ou si vous obtenez souhaitez obtenir des événements pour un utilisateur spécifique, vous pouvez le faire en arrière

$events = $this->Events->find()->matching('Projects.Users', function ($query) use ($userId) { 
    return $query->where(['user_id' => $userId]); 
}); 

Je suppose que vous avez défini dans votre fonction d'initialisation UsersTable

$this->hasMany('Projects'); 

Et dans votre ProjectsTable

$this->hasMany('Events'); 
$this->belongsTo('Users'); 

Et dans votre tableau des événements

$this->belongsTo('Projects'); 
+0

Merci tellement pour l'aide. ça a marché pour moi :) –