Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 15-10-2014 17:57:30

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Deux tables identiques copier les données de l'une à l'autre

Bonsoir,
J'ai deux tables identique au niveau de leur schéma et je dois à la validation manuelle des données insérés dans A , les copier dans B.

Avec Doctrine puis-je faire cela rapidement sans faire les setters de tous mes champs de B ?

Merci smile


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#2 16-10-2014 10:21:09

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Deux tables identiques copier les données de l'une à l'autre

Salut, si c'est deux tables, c'est deux modèles ... Sinon tu peux le mettre dans une autre base et tu utilises un deuxième EM smile.

Hors ligne

 

#3 16-10-2014 10:54:08

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Deux tables identiques copier les données de l'une à l'autre

Je suis pas hyper sur de la question... Ca me semble être le rôle d'un hydrator, mais je ne suis pas convaincu qu'il faille s'embêter à ce point dans ton cas...

Peux-tu détailler le problème ? Peut-être juste un setter:

Code:

[lang=php]
class A
{
    private $test;
    private $testSetter;
    private $notInB;

    public function __construct($test, $testSetter, $notInB)
    {
        $this->test = $test;
        $this->testSetter = $testSetter;
        $this->notInB = $notInB;
    }

    public function getTest()
    {
        return $this->test;
    }
    
    public function getTestSetter()
    {
        return $this->testSetter;
    }

    public function getNotInB()
    {
        return $this->notInB;
    }
}

class B
{
    private $test;
    private $testSetter;
    private $unknown;

    public function setTestSetter($testSetter)
    {
        $this->testSetter = $testSetter;
    }

    public function fromObjectA(A $objectA)
    {
        $vars = get_class_vars(__CLASS__);
        foreach($vars as $name => $value) {
            $getter = 'get'.ucfirst($name);
            $setter = 'set'.ucfirst($name);
            if(method_exists($objectA, $getter)) {
                if(method_exists($this, $setter)) {
                    $this->$setter($objectA->$getter());
                } else {
                    $this->$name = $objectA->$getter();
                }
            } else {
                /**
                 * @todo add log
                 */
            }
        }
    }
}

$a = new A('testTest', 'testTestSetter', 'testNotInB');
var_dump($a);

$b = new B();
var_dump($b);

$b->fromObjectA($a);
var_dump($b);

Hors ligne

 

#4 16-10-2014 11:34:17

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Deux tables identiques copier les données de l'une à l'autre

Bonjour a vous deux, merci pour votre temps smile

Le problème :

J'ai 3 classe proforma(aperçu de commande avant facturation), un utilisateur doit vérifier le montant des facture, et leur conformité etc... puis valider l'aperçu pour enregistrer en base les donnés definitives qui deviendront des factures.

Mes tables address et articles proforma sont rigoureusement identique à address et articles de facture, et pour faire transiter la donné de mes table proforma à fatcure je voulais savoir s'il n'y avait pas une méthode plus simple, que de me taper ligne par ligne :

Code:

[lang=php]
$factureAddress->setNom($proformaAddress->getNom());

J'ai regardé ce que tu as mis Théocrite, mais j'avoue avoir légèrement compris le concept, si tu peux développer smile

J'espère être plus clair en tous cas.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#5 16-10-2014 18:21:24

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Deux tables identiques copier les données de l'une à l'autre

Mon concept en gros est de passer ligne par ligne, sauf qu'au lieu de faire ça "bourrin", j'ai fait quelques tests.

Mon exemple comporte plusieurs cas, qui couvrent à mon avis les cas possibles.

Globalement:
- l'objet B est factureAddress, l'objet A est proformaAddress
- on accède aux propriétés de A par un getter
- le setter dans B est optionel

On injecte A dans un objet B, et pour chacun des champs de B (destination), on teste si A contient le getter.
Si A n'a pas de getter, on loggue et probablement lève une exception ou quoi (mon todo).
Si A a un getter pour le champ en question, soit B a un setter et on utilise le setter, soit il n'en a pas et on utilise une assignation directe.

On est donc sur de ne pas avoir d'exception, et on a la possibilité d'avoir un setter tout de même si on veut effectuer une transformation dans B smile

Hors ligne

 

#6 17-10-2014 09:07:43

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Deux tables identiques copier les données de l'une à l'autre

Bonjour,

Merci de ta réponse
J'ai fait un autre solution.

Qu'en pense tu ? :

Code:

[lang=php]
foreach ($proforma->getAddress() as $address) {
                    $datas = $address->getObjectAsArray();
                    $datas['idFacture'] = $lastInvoiceID;
                    $connection->insert('factureAddress', $datas);
                }

Ce code est dans une transaction.

ou getObjectasArray est dans mes entités :

Code:

[lang=php]
    public function getObjectAsArray() {
        return get_object_vars($this);
    }

ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#7 20-10-2014 15:19:26

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Deux tables identiques copier les données de l'une à l'autre

C'est essentiellement la même idée en effet smile

Pour moi ça marche, par contre je ne mettrais pas les inserts là, je ferais un tableau que j'insererai par la suite.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages