Bonjour,

je débute sur CakePhP et j'ai retourné la doc sans pour autant résoudre un problème de taille.

CONTEXTE : J'ai une table organes qui répertorie des pièces de voiture. J'aimerais créer une table association qui lie des organes entre eux (une roue va avec une jante, une autre roue va avec une autre jante). Problème : je n'arrive pas à utiliser l'alias.

Ce que je fais


CREATE TABLE organes_organes(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    organe1_id INT NOT NULL,
    organe2_id INT NOT NULL
);

<?php
namespace App\Model\Entity;
use Cake\ORM\Entity;

class Organe extends Entity
{

    protected $_accessible = [
        '*' => true,
        'id_organe' => false,
    ];

    public $name = 'Organe';

    public $hasAndBelongsToMany = array(
        'Organe1' =>
            array(
                'className' => 'Organe',
                'jointTable' => 'organes_organes', // table association
                'associationForeignKey' => 'organe1_id'
            ),
        'Organe2' =>
            array(
                'className' => 'Organe',
                'jointTable' => 'organes_organes',
                'associationForeignKey' => 'organe2_id'
            ),
    );
}
?>

Je me dirige ensuite vers le add() de la classe association organes_organes, en sélectionnant un organe X de la table organes.

Ce que je veux

Affichage de ma view (en gros, on peut choisir d'associer à l'organe X un autre organe). En confirmant, une nouvelle entrée s'ajoute dans la table association, avec l'id des deux organes.

Ce que j'obtiens

"SQLSTATE[42S02]: Base table or view not found: 1146 La table 'mabase.organe1s' n'existe pas

Please try correcting the issue for the following table aliases:
Sessions
Organe1s"

Je suis bien conscient que CakePhp croit que organe1s est une table parce que l'attribut s'appelle organe1_id dans la table.
Je ne comprends donc pas pourquoi l'alias ne fonctionne pas. J'ai surement du oublier des choses, mais quoi ?

En vous remerciant pour votre attention, je ne sais pas quoi faire ayant cherché partout.

Aucune réponse