Bonjour,
Je cherche à faire deux liaisons sql entre deux mêmes tables.
Je m'explique :
J'ai une table "orders" pour gérer mes commandes. Une autre table "addresses" pour gérer les adresses de nos clients.

Je voudrais donc avoir sur ma table "orders", deux clés étrangères pour gérer l'adresse de livraison de la commande ainsi que l'adresse de facturation.
"delivery_addresse_id", et "facturation_addresse_id".

J'ai mis tout ça en place grâce au super "MysqlWorkBench".
J'ai donc générer tous mes fichiers via la console.
Il me créé donc une propriété "address" mais qui ne récupère que une seule des deux addresses.
Comment puis personnaliser ça de manière à obtenir une propriété "delivery_addresse", et "facturation_addresse" ?

5 réponses


Regarde du côté des associations dans la Doc : http://book.cakephp.org/3.0/en/orm/associations.html
Si tu veux gérer deux adresses, il faut à mon sens créer deux tables (une delivery_adresses et une facturation_adresses).

SacreOl
Auteur

ok, mais jai besoin de gerer les deux en une seule table.

Ah du coup, tu dois ajouter des paramètres dans la liaison dans Orders:

$this->belongsTo ('DeliveryAddress', [
    'className' => 'Addresses',
    'foreignKey' => 'delivery_addresse_id'
]);
 $this->belongsTo ('FacturationAddress', [
    'className' => 'Addresses',
    'foreignKey' => 'facturation_addresse_id'
]);
SacreOl
Auteur

Yes ! merci pour cet élément de réponse. Ces liaisons fonctionnent, ou du moins ne causent aucune erreur.
En revanche, je n'arrive pas à faire ressortir ces données dans mon action view().
Je ne trouve rien la dessus sur la doc'...

SacreOl
Auteur
        $this->belongsTo('Addresses', [
            'classname' => 'DeliveryAddress',
            'foreignKey' => 'delivery_addresse_id',
            'propertyName' => 'deliveryAddress',
            // 'joinType' => 'INNER'
        ]);
        $this->belongsTo('Addresses', [
            'classname' => 'FacturationAddress',
            'foreignKey' => 'facturation_addresse_id',
            'propertyName' => 'facturationAddress',
            // 'joinType' => 'INNER'
        ]);

Finalement, voila les deux liaisons que je souhaite utiliser, mais à chaque appel de belongsTo, il vient remplacer la liaison avec cette table.
J'ai donc bien accès à l'adresse de facturation, mais pas à l'addresse de livraison...
Une idée pour palier à ce problème ?