2017-07-28 3 views
1

Je suis nouveau à cakephp. Je suis le constructeur de requête d'usign pour rechercher des détails de deux tables en utilisant joindre dans le constructeur de question de cakephp. Mais la question que j'écris est la récupération des détails seulement d'une table. Besoin d'aide pour obtenir des données de l'autre table aussi bien.Joindre une requête en récupérant des données à partir d'une seule table cakephp 3

Ceci est mon code pour récupérer les données en joignant deux tables:

public function edit($id = null) { 

    $events_table = TableRegistry::get('Events'); 

    $events = $events_table->find('all') 
      ->hydrate(false) 
      ->join([ 
      'CourseType'=> [ 
         'table'  => 'coursetype', 
         'type'  => 'LEFT', 
         'conditions' => 'Events.type = CourseType.coursetype_id', 
        ]     
      ])->where(['Events.id' => $id]); 

    $event = $events->toArray();  
    $this->set('event', $event); 
} 

En conséquence, je reçois que des détails de la table des événements. Mais j'ai besoin de données de coursetype aussi. Toute aide est appréciée. Je vous remercie.

+0

essayez ce https://stackoverflow.com/a/845519/4514250. Peut être que c'est utile. –

+0

Est-ce pour cakephp 3.x ou cakephp 2.x? –

Répondre

1

manuellement ajouter ne s'associe, toutes les données supplémentaires à choisir, vous auriez à faire sur votre propre en spécifiant les champs à sélectionner via la méthode select().

$events = $events_table 
    ->find('all') 
    ->hydrate(false) 
    ->select($events_table) 
    // either add the fields one by one, or pass a table object 
    // as above to select all fields of the table 
    ->select(['CourseType.id', 'CourseType.xyz', /* ... */]) 
    // ... 

Je vous suggère d'utiliser plutôt utiliser les confinements, à savoir configurer l'association requise si pas déjà, puis utilisez simplement contain():

$events = $events_table 
    ->find('all') 
    ->hydrate(false) 
    ->contain('CourseType') 
    ->where(['Events.id' => $id]); 

Voir aussi

+0

est le nom du modèle 'CourseType'? –

+0

Cela dépend de votre configuration, je viens d'utiliser les mêmes alias que vous avez dans votre exemple. Si vous suivez les [** conventions de dénomination **] (https://book.cakephp.org/3.0/fr/intro/conventions.html#model-and-database-conventions) de CakePHP, alors le "(classe class) nom serait' Coursetype', et si vous suiviez les convetions pour les noms de table de base de données aussi, alors ce serait 'course_types', et le nom du modèle serait' CourseTypes'. @VaruniNR – ndm

+0

Okay Merci. Va l'essayer –

-3

votre solution ici: CakePHP find method with JOIN

+0

Je pense que c'est pour cakephp 2.x. Pouvez-vous envoyer une réponse pour cakephp 3.x? –