Bonjour,

Je suis entrain de développer une application pour la gestions des test pour un laboratoire médical, un patient peut faire plusieurs visites, une visite peut faire l'objet de passer plusieurs tests,
j'ai pu afficher les différentes visites pour un patient donné grâce à l'association belongsTo, et visualiser le détails d'une visite mais lorsque je veux lister les tests passés pour une visite donnée là où se trouve le problème.

// Model Check
class Check extends AppModel {
//public $belongsto = array("Visit");  
    public $hasAndBelongsToMany = array (
        'Visit' => array (
            'className'             => 'Visit',
            'joinTable'             => 'checks_visits',
            'foreignKey'            => 'check_id',
            'associationForeignKey' => 'visit_id',
            'unique'                => false
        )
    );
    }
// Visit
class Visit extends AppModel {

    public $belongsto = array("Patient");
//   public $displayField = 'libelle';
        public $hasAndBelongsToMany = array (
        'Check' => array (
            'className'             => 'Check',
            'joinTable'             => 'checks_visits',
            'foreignKey'            => 'visit_id',
            'associationForeignKey' => 'check_id',
            'unique'                => false
        )
    );      
}

au niveau de ma vu j'escrit
'''
<?php echo $this->Html->link('voir les examens',array('controller' => 'checks','action'=>'viewch',$article['Visit']['id'])); ?>

et au niveau du controller ChecksController
public function viewch($id){
$checks=$this->Check->CheckR->find('all',array('conditions'=>array('CheckR.visit_id'=>$id)));
$this->set(compact($checks));
}
'''
lorsque j'appelle à la vue viexch
j’obtiens

Error: Call to a member function find() on a non-object
File: C:\wamp\www\labweb\app\Controller\ChecksController.php
Line: 5

4 réponses


Bonjour.
Ce ne serait pas parce que tu fais $this->Check->CheckR->find(...); alors qu'il ne doit pas comprendre CheckR ?
Car pour que tu aies l'erreur d'objet pour la méthode find, je ne vois que ça pour ma part.

Merci Lartek,
j'ai utilisé table checks_visits pour le model CheckR , afin que je puisse afficher les checks appropriés à la visite concernée ainsi leurs resultats en effet j'ai oublié de preciser que la table checks_visits ne contient pas seulement (id,check_id,visit_id) mais aussi elle contient (id,check_id,visit_id,resultat)
Mr Latrak, je n'ai pas compris le deuxieme partie de votre rèponse
Car pour que tu aies l'erreur d'objet pour la méthode find, je ne vois que ça pour ma part.
Merci encore

Tu n'as pas déclaré l'association avec le model CheckR, du coup il ne peut pas le trouver et l'appel à la méthode find échoue, lorsque tu sors des conventions de nommage de CakePHP, il te faut faire plus attention.
Tu as écrit deux fois mon pseudo et tu l'as mal écrit à chaque fois, tu pourrais aurais au moins pu l'écrire correctement ne serait-ce qu'une fois.

Vraiment je suis desolé Mr LARTAK, l'un des debutants de cakephp ne doit pas se tromper à l'ecriture du pseudo de quelqu'un qui est toujour à notre ecoute et à nous aider et nous debloquer, desolé encore.
en ce qui concerne le model CheckR ,
'''
class CheckR extends AppModel {
public $useTable="checks_visits";
public $belongsTo=array('Check','Visit');
}
'''
j'ai imité l'un des tutoriaux de ce forum, TagR.
Merci encore