Bonjour à tous,
Ayant un projet d'étude en WEB, j'ai décidé de suivre la formation sur CakePHP.
Jusqu'ici tout va généralement bien mis à part un problème que je n'arrive à résoudre depuis hier.
Pour faire simple j'ai 2 tables à associer en relation N:N, j'ai une table Users et une table Theses. Sachant qu'un User peut avoir plusieurs Thesis(singulier de Theses) et un Thesis peut appartenir à plusieurs User.
Actuellement la relation User:N fonctionne, c'est à dire que je peux associer plusieurs Thesis à 1 seul User.
Mais le problème étant que la relation Thesis:N ne fonctionne pas. En effet, une fois la requête passée, celle-ci effectue des DELETE et des UPDATE sur mes valeurs.
Bien évidemment j'ai au préalable déclaré la liaison N:N
class Thesis extends AppModel
{
public $hasAndBelongsToMany = array('User');
}
Et inversement pour l'autre modèle (User).
Et voici ma table de liaison :
Ci-dessous, le code qui fonctionne.
$this->User->Thesis->save(array(
'User' => array('id' => 25),
'Thesis' => array('id' => 1)
));
$this->User->Thesis->create();
$this->User->Thesis->save(array(
'User' => array('id' => 25),
'Thesis' => array('id' => 2)
));
$this->set(compact('users'));
Maintenant si je fais l'inverse, c'est à dire lier un Thesis à plusieurs User.
$this->User->Thesis->save(array(
'User' => array('id' => 25),
'Thesis' => array('id' => 1)
));
$this->User->Thesis->create();
$this->User->Thesis->save(array(
'User' => array('id' => 170),
'Thesis' => array('id' => 1)
));
$this->set(compact('users'));
J'ai mes données dans mes tables qui se delete et se réinscrivent avec les nouveaux users.
Voici ce que j'ai niveau requête :
array(
'log' => array(
(int) 0 => array(
'query' => 'BEGIN',
'params' => array(),
'affected' => null,
'numRows' => null,
'took' => null
),
(int) 1 => array(
'query' => 'SELECT COUNT(*) AS `count` FROM `gest_tfe_heh`.`theses` AS `Thesis` WHERE `Thesis`.`id` = 1',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 0
),
(int) 2 => array(
'query' => 'SELECT COUNT(*) AS `count` FROM `gest_tfe_heh`.`theses` AS `Thesis` WHERE `Thesis`.`id` = 1',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 0
),
(int) 3 => array(
'query' => 'SELECT COUNT(*) AS `count` FROM `gest_tfe_heh`.`theses` AS `Thesis` WHERE `Thesis`.`id` = 1',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 1
),
(int) 4 => array(
'query' => 'UPDATE `gest_tfe_heh`.`theses` SET `id` = 1, `updated` = '2015-07-17 13:59:09' WHERE `gest_tfe_heh`.`theses`.`id` = 1',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 0
),
(int) 5 => array(
'query' => 'SELECT `ThesesUser`.`user_id` FROM `gest_tfe_heh`.`theses_users` AS `ThesesUser` WHERE `ThesesUser`.`thesis_id` = 1',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 1
),
(int) 6 => array(
'query' => 'DELETE `ThesesUser` FROM `gest_tfe_heh`.`theses_users` AS `ThesesUser` WHERE `ThesesUser`.`thesis_id` = 1 AND `ThesesUser`.`user_id` = (25)',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 1
),
(int) 7 => array(
'query' => 'INSERT INTO `gest_tfe_heh`.`theses_users` (`thesis_id`, `user_id`) VALUES (?,?)',
'params' => array(
(int) 0 => (int) 1,
(int) 1 => (int) 25
),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 1
),
(int) 8 => array(
'query' => 'COMMIT',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 1
),
(int) 9 => array(
'query' => 'BEGIN',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 1
),
(int) 10 => array(
'query' => 'SELECT COUNT(*) AS `count` FROM `gest_tfe_heh`.`theses` AS `Thesis` WHERE `Thesis`.`id` = 1',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 1
),
(int) 11 => array(
'query' => 'SELECT COUNT(*) AS `count` FROM `gest_tfe_heh`.`theses` AS `Thesis` WHERE `Thesis`.`id` = 1',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 0
),
(int) 12 => array(
'query' => 'SELECT COUNT(*) AS `count` FROM `gest_tfe_heh`.`theses` AS `Thesis` WHERE `Thesis`.`id` = 1',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 1
),
(int) 13 => array(
'query' => 'UPDATE `gest_tfe_heh`.`theses` SET `id` = 1, `updated` = '2015-07-17 13:59:09' WHERE `gest_tfe_heh`.`theses`.`id` = 1',
'params' => array(),
'affected' => (int) 0,
'numRows' => (int) 0,
'took' => (float) 0
),
(int) 14 => array(
'query' => 'SELECT `ThesesUser`.`user_id` FROM `gest_tfe_heh`.`theses_users` AS `ThesesUser` WHERE `ThesesUser`.`thesis_id` = 1',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 1
),
(int) 15 => array(
'query' => 'DELETE `ThesesUser` FROM `gest_tfe_heh`.`theses_users` AS `ThesesUser` WHERE `ThesesUser`.`thesis_id` = 1 AND `ThesesUser`.`user_id` = (25)',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 1
),
(int) 16 => array(
'query' => 'INSERT INTO `gest_tfe_heh`.`theses_users` (`thesis_id`, `user_id`) VALUES (?,?)',
'params' => array(
(int) 0 => (int) 1,
(int) 1 => (int) 170
),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 1
),
(int) 17 => array(
'query' => 'COMMIT',
'params' => array(),
'affected' => (int) 1,
'numRows' => (int) 1,
'took' => (float) 1
)
),
'count' => (int) 18,
'time' => (float) 12
)
Alors soit je n'ai rien compris au tutoriel, soit j'ai quelque chose qui ne va pas, j'ai déjà essayé avec mon controller User et Thesis en inversant les données pour voir si le problème ne venait pas de là mais rien n'y fait...
Si quelqu'un a une solution à mon problème, je suis preneur...
Merci à vous !
Re-bonjour,
Je suis toujours bloqué sur ce problème entre mes tables ...
Quelqu'un pourrait au moins me dire si c'est "normal" que ma relation N:N ne marche pas ? (dû à une mauvaise manipulation)
En vous remerciant