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;
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;
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
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;
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
 
<?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'
          ]);
  }
 
}
 
?>
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'
    ]);
 
  }
 
}
 
?>
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
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);  
  }
 
}
?>
Et je me retrouve avec une propriété Slides dans "$rows_tv" mais qui est désespérément vide...
Alors qu'il existe une relation pour l'id_tv = 1 avec un slide...

De plus quand je regarde les "Sql-log" je vois:
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')
Et cette requête renvoie bien un résultat...

Quelqu'un peut-il m'aider ?

Merci d'avance,
Alain