Bonjour à tous,
Je suis confronté à un petit problème auquel je n'arrive pas à trouver une solution.
Je possède quatres modèles User, Classroom, Year et Establishment.
Classroom est relié à User, Year et Establishment avec un belongsTo :
class Classroom extends AppModel
{
var $belongsTo = array(
'Year',
'User',
'Establishment');
}
Depuis mon controller classroom_controller.php, je récupère la liste des utilisateurs, des années et des établissements scolaires pour les transmettre à ma vue dans ma méthode add() (pour que l'utilisateur puisse choisir à quelle année scolaire, à quel établissement et à quel utilisateur la classe qu'il souhaite ajouter appartient).
/**
* Méthode permettant d'ajouter une classe.
*
* @return void
* @access public
*/
function add()
{
//On transmet à la vue la liste des établissements, années scolaires et utilisateurs.
$e = $this->Classroom->Establishment->find('list');
$this->set('establishments', $e);
$y = $this->Classroom->Year->find('list');
$this->set('years', $y);
$u = $this->Classroom->User->find('list');
$this->set('users', $u);
Après, je récupère les valeurs dans ma vue add.ctp. Cela fonctionne très bien pour les établissements et les années, mais pas pour les utilisateurs.
echo $this->Form->input('user_id', array('options' => $users, 'label'=>'Professeur titulaire de la classe'));
echo $this->Form->input('year_id', array('options' => $years, 'label'=>'Année scolaire'));
echo $this->Form->input('establishment_id', array('options' => $establishments, 'label'=>'Etablissement scolaire'));
Pour essayer d'en savoir plus, j'ai tenté un debug($users); qui me renvoie la variable $users vide.
Je ne comprend vraiment pas d'où peut venir mon erreur d'autant plus que j'ai déjà réussi à récupérer les utilisateurs dans d'autres contrôleurs sans aucun problème.
Merci d'avance pour votre aide,
Jean
Tu as bien un champs "name" dans User ?
Tu as affiché les requêtes SQL ? Si oui tu vois bien la requête se faire ?
Eu, j'ai trouvé Graph' ^^
Une bête erreur de copier coller.
J'avais déclaré un HABTM en dessous et en faisant mon copier/coller, j'ai oublier de renommer le User en Pupil et donc ça entrait en conflit avec mon belongsTo.
Erreur idiote !! Merci encore pour ton aide ;)
Merci pour ta réponse :)
Oui, j'ai bien un champs "name" dans User mais je me suis arrangé pour pouvoir afficher le champ nom et prénom en ajoutant cette fonction dans mon appmodel
function find($conditions = NULL, $fields = array (), $order = NULL, $recursive = NULL)
{
if ($conditions == 'list' && is_array($this->displayField))
return Set::combine($this->find('all', $fields, $order, $recursive), "{n}.{$this->name}.{$this->primaryKey}", $this->displayField);
else
return parent::find($conditions, $fields, $order, $recursive);
}
et en déclarant un nouveau $displayField dans mon modèle user.php
var $displayField = array("%s %s", "{n}.User.first_name", "{n}.User.name");
Ce qui m'énerve vraiment c'est que depuis mon contrôleur establishment_controller.php je procède exactement de la même manière et que ça fonctionne sans aucun problème.
En fait, je comprend pas la requête qu'il fait pour les utilisateurs, elle n'est pas bonne
SELECT `Establishment`.`id`, `Establishment`.`name` FROM `establishments` AS `Establishment` WHERE 1 = 1
SELECT `Year`.`id`, `Year`.`title` FROM `years` AS `Year` WHERE 1 = 1
SELECT `User`.`id`, `User`.`name` FROM `pupils` AS `User` WHERE 1 = 1
Pourquoi le fait-il dans pupils. Il devrait la faire dans users. Je ne comprends pas =/