Bonjour,
J'ai deux tables:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE TABLE `tvs` ( `TV_ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `TV_NOM` varchar(255) NOT NULL, `TV_SLIDE` varchar(255) DEFAULT NULL, `TV_SLIDE_VERSION` int(10) unsigned DEFAULT NULL, `TV_WIDTH` smallint(6) NOT NULL, `TV_HEIGHT` smallint(6) NOT NULL, `TV_REFRESH_TIME` int(11) NOT NULL, `TV_DATE_DERNIÈRE_CONNEXION` datetime DEFAULT NULL, PRIMARY KEY (`TV_ID`), KEY `TV_NOM` (`TV_NOM`(191)) ) ENGINE=InnoDB;Pour relier ces deux tables, j'ai une table de relations:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE TABLE `slides` ( `SLIDE_ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `SL_SLIDE` varchar(255) NOT NULL, PRIMARY KEY (`SLIDE_ID`) ) ENGINE=InnoDB;
J'ai donc créé deux classes "Tables":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 CREATE TABLE `slides_tvs` ( `TV_ID` int(10) unsigned NOT NULL, `SLIDE_ID` int(10) unsigned NOT NULL, `TS_JOURS_SEMAINE` bit(7) NOT NULL, `TS_DATE_DÉBUT` date NOT NULL, `TS_DATE_FIN` date NOT NULL, `TS_HEURE_DÉBUT` time NOT NULL, `TS_HEURE_FIN` time NOT NULL, PRIMARY KEY (`TV_ID`,`SLIDE_ID`), KEY `TS_JOURS_SEMAINE` (`TS_JOURS_SEMAINE`), KEY `TS_DATE_DÉBUT` (`TS_DATE_DÉBUT`), KEY `TS_DATE_FIN` (`TS_DATE_FIN`), KEY `TS_HEURE_DÉBUT` (`TS_HEURE_DÉBUT`), KEY `TS_HEURE_FIN` (`TS_HEURE_FIN`), KEY `slides_tvs_ibfk_slide_id` (`SLIDE_ID`), CONSTRAINT `slides_tvs_ibfk_slide_id` FOREIGN KEY (`SLIDE_ID`) REFERENCES `slides` (`SLIDE_ID`), CONSTRAINT `slides_tvs_ibfk_tv_id` FOREIGN KEY (`TV_ID`) REFERENCES `tvs` (`TV_ID`) ) ENGINE=InnoDB;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <?php namespace App\Model\Table; use Cake\ORM\Table; class TvsTable extends Table { public function initialize(array $config) { $this->belongsToMany('Slides', [ 'joinTable' => 'slides_tvs', 'foreignKey' => 'tv_id', 'targetForeignKey' => 'slide_id' ]); } } ?>Dans mon controller voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <?php namespace App\Model\Table; use Cake\ORM\Table; class SlidesTable extends Table { public function initialize(array $config) { $this->belongsToMany('Tvs', [ 'joinTable' => 'slides_tvs', 'foreignKey' => 'slide_id', 'targetForeignKey' => 'tv_id' ]); } } ?>
Et je me retrouve avec une propriété Slides dans "$rows_tv" mais qui est désespérément vide...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <?php namespace App\Controller; use App\Controller\AppController; use Cake\ORM\TableRegistry; use Cake\Event\Event; use Cake\Auth\BaseAuthenticate; use Cake\Auth\DefaultPasswordHasher; use Cake\View\Helper\HtmlHelper; use App\Model\Entity\TvsEntity; class TvsController extends AppController { public function ModifierTv($id) { $query_tv = TableRegistry::get('tvs'); $rows_tv = $query_tv->find('all')->where(['tv_id' => 1])->contain(['Slides'])->all(); debug($rows_tv); debug($rows_tv->first()->slides); } } ?>
Alors qu'il existe une relation pour l'id_tv = 1 avec un slide...
De plus quand je regarde les "Sql-log" je vois:
Et cette requête renvoie bien un résultat...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT SlidesTvs.slide_id AS `SlidesTvs__slide_id`, SlidesTvs.TV_ID AS `SlidesTvs__TV_ID`, SlidesTvs.SLIDE_ID AS `SlidesTvs__SLIDE_ID`, SlidesTvs.TS_JOURS_SEMAINE AS `SlidesTvs__TS_JOURS_SEMAINE`, SlidesTvs.TS_DATE_DÉBUT AS `SlidesTvs__TS_DATE_DÉBUT`, SlidesTvs.TS_DATE_FIN AS `SlidesTvs__TS_DATE_FIN`, SlidesTvs.TS_HEURE_DÉBUT AS `SlidesTvs__TS_HEURE_DÉBUT`, SlidesTvs.TS_HEURE_FIN AS `SlidesTvs__TS_HEURE_FIN`, Slides.SLIDE_ID AS `Slides__SLIDE_ID`, Slides.SL_SLIDE AS `Slides__SL_SLIDE` FROM slides Slides INNER JOIN slides_tvs SlidesTvs ON Slides.SLIDE_ID = (SlidesTvs.slide_id) WHERE SlidesTvs.tv_id in ('1')
Quelqu'un peut-il m'aider ?
Merci d'avance,
Alain
Partager