CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 30-03-2018 11:44:10

Baroska
Forêt noire
Date d'inscription: 10-03-2009
Messages: 126

Une ternaire avec Cake 3.0

Bonjour à tous,

voici la situation :
3 tables series, lignes, planches réliées entre elles par une relation ternaire et une table de jointure series_lignes_planches.

Le contexte :
Une série (d'un légume) va sur une ligne (bande extérieure, bande centrale) d'une planche (planche de la serre #1, planche de la serre #2, ...)

la table Lignes :

Code: php

  1. class LignesTable extends Table
  2. {
  3.  
  4.     /**
  5.      * Initialize method
  6.      *
  7.      * @param array $config The configuration for the Table.
  8.      * @return void
  9.      */
  10.     public function initialize(array $config)
  11.     {
  12.         parent::initialize($config);
  13.  
  14.         $this->setTable('lignes');
  15.         $this->setDisplayField('id');
  16.         $this->setPrimaryKey('id');
  17.  
  18.         $this->belongsToMany('Series', [
  19.             'joinTable' => 'series_lignes_planches'
  20.         ]);
  21.         $this->belongsToMany('Planches', [
  22.             'joinTable' => 'series_lignes_planches'
  23.         ]);
  24.     }

La table Planches :

Code: php

  1. class PlanchesTable extends Table
  2. {
  3.  
  4.     /**
  5.      * Initialize method
  6.      *
  7.      * @param array $config The configuration for the Table.
  8.      * @return void
  9.      */
  10.     public function initialize(array $config)
  11.     {
  12.         parent::initialize($config);
  13.  
  14.         $this->setTable('planches');
  15.         $this->setDisplayField('id');
  16.         $this->setPrimaryKey('id');
  17.  
  18.         $this->belongsTo('Secteurs', [
  19.             'foreignKey' => 'secteur_id',
  20.             'joinType' => 'INNER'
  21.         ]);
  22.         $this->belongsToMany('Lignes', [
  23.             'joinTable' => 'series_lignes_planches'
  24.         ]);
  25.         $this->belongsToMany('Series', [
  26.             'joinTable' => 'series_lignes_planches'
  27.         ]);
  28.     }

La table Serie :

Code: php

  1. class SeriesTable extends Table
  2. {
  3.  
  4.     /**
  5.      * Initialize method
  6.      *
  7.      * @param array $config The configuration for the Table.
  8.      * @return void
  9.      */
  10.     public function initialize(array $config)
  11.     {
  12.         parent::initialize($config);
  13.  
  14.         $this->setTable('series');
  15.         $this->setDisplayField('id');
  16.         $this->setPrimaryKey('id');
  17.  
  18.         $this->belongsTo('Varietes', [
  19.             'foreignKey' => 'variete_id',
  20.             'joinType' => 'INNER'
  21.         ]);
  22.  
  23.         $this->belongsToMany('Actions', [
  24.             'foreignKey' => 'series_id',
  25.             'targetForeignKey' => 'action_id',
  26.             'joinTable' => 'actions_series'
  27.         ]);
  28.        
  29.         $this->belongsToMany('Lignes', [
  30.             'joinTable' => 'series_lignes_planches',
  31.         ]);
  32.         $this->belongsToMany('Planches', [
  33.             'joinTable' => 'series_lignes_planches',
  34.         ]);
  35.     }

Mon but est d'enregistrer dans la table jointe en plus de chacun des identifiants de ces tables, la date et un commentaire.

Code: php

  1.    public function add($plantation)
  2.     {
  3.         $series = $this->Series->newEntity();
  4.         if ($this->request->is('post')) {
  5.             $series = $this->Series->patchEntity($series, $this->request->getData());
  6.        
  7.         $laligne = $this->Series->Lignes->findById($this->request->getData()['lignes'])->first();
  8.         $laligne->_joinData = $this->Series->SeriesLignesPlanches->newEntity();
  9.             if ($this->Series->save($series)) {...

mais arrive l'erreur :

Table "App\Model\Table\SeriesTable" is not associated with "SeriesLignesPlanches"

J'ai essayé de reprendre le code voir si une erreur s'est glissée, j'ai essayé avec l'option through et d'ajouter la table SerieLignesPlanchesTable.php

Code: php

  1. class SeriesLignesPlanchesTable extends Table
  2. {
  3.  
  4.     /**
  5.      * Initialize method
  6.      *
  7.      * @param array $config The configuration for the Table.
  8.      * @return void
  9.      */
  10.     public function initialize(array $config)
  11.     {
  12.         parent::initialize($config);
  13.  
  14.         $this->setTable('series_lignes_planches');
  15.         $this->setDisplayField('serie_id', 'ligne_id', 'planche_id');
  16.         $this->setPrimaryKey(['serie_id', 'ligne_id', 'planche_id', 'date_serieligneplanche']);
  17.  
  18.         $this->belongsTo('Series', [
  19.             'foreignKey' => 'serie_id',
  20.             'joinType' => 'INNER'
  21.         ]);
  22.        
  23.         $this->belongsTo('Lignes', [
  24.             'foreignKey' => 'ligne_id',
  25.             'joinType' => 'INNER'
  26.         ]);
  27.  
  28.         $this->belongsTo('Planches', [
  29.             'foreignKey' => 'planche_id',
  30.             'joinType' => 'INNER'
  31.         ]);

Quelqu'un a t'il une idée ?
Merci d'avance.

Hors ligne

 

Pied de page des forums

Propuls� par FluxBB
Traduction par FluxBB.fr