2017-08-07 3 views
0

Je suis passé de cakephp2 à cakephp3. Ici, je ne peux pas comprendre, comment les données associées peuvent être stockées. J'ai une table appelée Orders et une table appelée Ordersarticles. Il y a une vue où les informations de commande et les articles de commande multiples sont intégrés. Maintenant je veux stocker les données dans le contrôleur.Cakephp 3 stocker les données associées

J'ai le code suivant

public function add(){ 

    $order = $this->Orders->newEntity(); 

    if ($this->request->is('post')) { 

     $order = $this->Orders->patchEntity($order, $this->request->getData()); 

     $i = 0; //Index for each Field 
     foreach($order->Orderarticles['article_id'] as $oaarticleid){ 
     $orderarticles = [ 
      'article_id' => $oaarticleid, 
      'amount' => $order->Orderarticles['amount'][$i] 
     ]; 
     $i++; 
     } 

     $order['Orderarticles'] = $orderarticles; 

     //Store Order 
     if ($result = $this->Orders->save($order)) { 

     //Store orderArticles 
     $this->Flash->success(__('The order has been saved.')); 

     //return $this->redirect(['action' => 'index']); 
     } 
     $this->Flash->error(__('The order could not be saved. Please, try again.')); 
    } 

Les orderArticles dans la boucle sont préparés pour le format. Cependant, quand je veux stocker l'information, seulement la commande, pas les articles de commande sont stockés. Je n'ai absolument aucune idée comment je peux également stocker les informations supplémentaires ...

J'ai également essayé de stocker d'abord la commande, obtenir l'id inséré et puis stocker les articles de commande. Mais j'ai totalement échoué. J'ai envie d'être nouveau dans Cakephp. Pouvez-vous m'aider?

+0

Vous pouvez utiliser l'identifiant de la commande comme ceci: '$ orderId = $ result-> id' cela retournera l'identifiant de la commande sauvegardée. Vous pouvez maintenant utiliser '$ orderId' pour l'ajouter en tant que clé étrangère dans la table orderaticles. – CodeWhisperer

+0

Je sais à ce sujet. Mais comment puis-je stocker les articles de commande? C'est mon problème! – DS87

Répondre

1

Je suppose que vous ne voulez pas faire quelque chose comme ça après avoir enregistré la commande.

if ($result = $this->Orders->save($order)) { 
     $articles = $this->request->getData("articles"); 

     $i = 0; 
     foreach ($articles as $article) { 
      $data = [ 
       'article_id' => $result->id, 
       'amount' => $i++ 
      ]; 
      $article = $this->Orderarticles->newEntity(); 
      $article = $this->Orderarticles->patchEntity($article, $data); 
      $this->Orderarticles->save($article); 
     } 
    } 
+0

Vous êtes mon héros personnel de la semaine (bien que ce soit juste lundi :-)). Enfin, je devais '$ this-> Orders-> Orderarticles-> newEntity()'. Je ne comprends pas totalement le patchEnitity lisant la documentation. Quel est le premier paramètre pour? Est-ce quelque chose comme un type d'objet qui devrait être corrigé? – DS87

+0

Le premier paramètre à l'intérieur de patchEntity est utilisé pour définir les données que vous pouvez sauvegarder. C'est comme un squelette avec toutes les colonnes possibles de votre table de base de données. – CodeWhisperer