Association belongsTo

Par Tulifer, il y a 13 ans


Bonjour, j'aimerai mettre en relation des données comme par exemple un article avec une catégorie sauf que moi il s'agit de question.
Dans ma base j'ai 2 tables que voici :

CREATE TABLE questions
 (
   id INT(32) NOT NULL ,   
   libelle VARCHAR(255) NOT NULL ,
   category_id INT(3) NOT NULL ,
   ask_id INT(10) NULL , 
   , PRIMARY KEY (id) 
 );
CREATE TABLE IF NOT EXISTS categories
 (
   id INT(3) NOT NULL ,
   libelle VARCHAR(60) NOT NULL ,
   slug varchar(60) NOT NULL  
   , PRIMARY KEY (id) 
 );
ALTER TABLE questions 
  ADD FOREIGN KEY FK_QUESTIONS_CATEGORIES (category_id)
      REFERENCES categories (id) ;

J'aimerai afficher dans quelle catégorie se trouve une question le hic c'est que je n'y arrive pas.
Dans mon Model Question j'ai ceci ->

public $belongsTo = array('Category');

Dans mon Controller Questions j'ai ceci ->

public $uses=array('Questions'); 
        public function index(){
            debug($this->Questions->find('all'));
        }

Mais lorsque je vais voir ma page je n'ai pas La catégorie approprié qui s'affiche.

array(
    (int) 0 => array(
        'Questions' => array(
            'id' => '1',
            'category_id' => '1',
            'ask_id' => '2',
            'libelle' => 'Question 1'
        )
}

Savez vous d'ou viens le problème merci de vos réponse bonne journée.

Ps: Version 2.3.2 de CakePhp

6 réponses

justclara42, il y a 13 ans

salut, il me semble de mémoire qu'il faux définir scertain paramètre.

c'est moi je procède ainsi:

public $belongsTo = array(
        'Category' => array(
            'className' => 'Category',
            'foreignKey' => 'category_id',
            'conditions' => '',
            'fields' => 'name',
            'order' => ''
        )
            );

ça marche chez moi peux importe le contrôler qui est associé au catégories.

Tulifer, il y a 13 ans

Bonjour, merci de t'as réponse mais cela ne marche toujours pas chez moi.

Ps: Version 2.3.2 de CakePHP

justclara42, il y a 13 ans

et si tu fais un

debug($this->Questions->Category->find('list'));

tu as bien la liste de tes catégories ?

Tulifer, il y a 13 ans

Non justement. Mais un joli message d'erreur.
Error: Call to a member function find() on a non-object

Tulifer, il y a 13 ans

J'ai lu je ne sais plus ou qu'il y avait des problèmes avec la 2.3.2 donc j'ai pris une ancienne version la 2.3.1 et sa marche. Mais je trouve sa bizarre que cela ne fonctionne pas sur le 2.3.2.

leFuret17, il y a 13 ans
debug($this->Questions->find('all'));

Avec

debug($this->Question->find('all'));

et sans

public $uses=array('Questions');

Juste

public $belongsTo = array('Category');

est suffisant si aucun paramètre particulier est demander.
A mon devrait ca devrait fonctionner....
et sans la relation SQL entre les 2 tables sauf si tu veux en plus une gestion des enregistrements par mysql.