Bonsoir,
Suite à une jointure belongsTo, hasMany plus rien ne fonctionne
Dans mon controller SeriesController je veux accéder à $this->Serie->find('all') via l'adresse admin/series/index et il me dit :
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Episode.series_id' in 'field list'
En effet series_id n'existe pas vu qu'il faut du singulier au niveau de la convention.
Dans Serie.php j'ai :
public $hasMany = array('Episode');
et dans Episode.php j'ai :
public $belongsTo = array('Serie');
Donc une série à plusieurs épisode et un épisode appartient à une série.
Voici SeriesController.php :
<?php
class SeriesController extends AppController {
public $uses = array('Serie');
public function admin_menu() {
return $this->Serie->find('all');
}
public function index(){
$d'series'] = $this->Serie->find('all');
$this->set($d);
}
function show($id = null,$slug = null){
if(!$id)
throw new NotFoundException('Aucune page ne correspond à cet ID');
$page = $this->Serie->find('first', array(
'conditions' => array('id' => $id)
));
if(empty($page))
throw new NotFoundException('Aucune page ne correspond à cet ID');
if($slug != $page'Serie']'slug'])
$this->redirect($page'Serie']'link'],301);
$d'serie'] = current($page);
$this->set($d);
}
public function admin_index(){
$d'series'] = $this->Serie->find('all');
$this->set($d);
}
}
?>
Pour ne pas avoir d'erreur je dois faire $this->Serie->Episode mais je ne veux pas forcément récupérer des information sur la table episodes. Par la même occasion admin_menu() ne fonctionne pas non plus pour l'utilisation d'un requestAction dans une vue
Si ça peut aider voila mon EpisodesController.php
<?php
class EpisodesController extends AppController {
public function admin_index() {
$this->loadModel('Serie');
$d'series'] = $this->Serie->Episode->find('all');
$this->set($d);
}
public function admin_edit($id = null) {
if($this->request->is('post') || $this->request->is('put')) {
if($this->Episode->save($this->request->data)) {
$this->Session->setFlash("L'épisode à bien été ajouté","notif");
$this->redirect(array('action'=>'index'));
}
}
elseif($id) {
$this->Episode->id = $id;
$this->request->data = $this->Episode->read();
}
$d'series'] = $this->Episode->Serie->find('list');
$this->set($d);
}
public function admin_delete($id) {
$this->Session->setFlash("L'épisode a bien été supprimé",'notif');
$this->Post->delete($id);
$this->redirect($this->referer());
}
}
?>
Merci d'avance.
Merci de ta réponse mais ça ne change absolument rien, je crois que le problème vient d'ailleurs, j'ai réussi à le faire fonctionner tout à l'heure sans forcer la clé étrangère mais ce n'était pas ce que je voulais et j'ai modifié ensuite (voir plus haut).
public $belongsTo = array(
'Serie' => array(
'foreignKey' => 'serie_id'
)
);
Ça ne fonctionne donc pas :/
Le résultat de ma requête sur SeriesController::admin_index :
SELECT `Episode`.`id`, `Episode`.`saison`, `Episode`.`episode`, `Episode`.`name`, `Episode`.`diffusion`, `Episode`.`info`, `Episode`.`serie_id`, `Episode`.`series_id` FROM `episodes` AS `Episode` WHERE `Episode`.`series_id` = (1)
Pourtant le admin_index est des plus classique, donc le soucis doit venir de la jointure mais je ne trouve pas.