2017-08-07 21 views
0

私はcakephp2からcakephp3に切り替えました。ここでは、関連するデータをどのように格納することができるのか理解できません。私はOrdersと呼ばれるテーブルとOrdersarticlesというテーブルを持っています。注文情報と複数の注文書が入力されるビューがあります。今度は、データをコントローラに保存します。Cakephp 3関連データを保存

Iは、ループ内orderArticlesは、適切なフォーマットのために準備されている次のコード

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.')); 
    } 

を有します。しかし、私が情報を保存したいときは、オーダーパーティクルではなく、オーダーのみが保存されます。追加情報をどのように保存することができるのか全く分かりません...

私はまた、注文を最初に保存しようとしましたが、挿入されたIDを取得して注文書を保管しました。しかし、私は完全に失敗しました。私はCakephpで新しくなった気がする。手伝って頂けますか?

+0

'$ orderId = $ result-> id'のように、idを使用すると、保存された注文のIDが返されます。これで、 '$ orderId'を使って、orderaticlesテーブルの中に外部キーを追加することができます。 – CodeWhisperer

+0

私はそれについて知っています。しかし、私はどのようにorderArticlesを保存することができますか?それは私の問題です! – DS87

答えて

1

私はあなたが注文を保存した後、このようなことをしないと思います。

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

あなたは今週の私の個人的なヒーローです(それはちょうど月曜日です:-))。最後に、 '$ this-> Orders-> Orderarticles-> newEntity()'を実行する必要がありました。私は完全にドキュメントを読むpatchEnitityを理解していません。最初のパラメータは何ですか?それはパッチを当てるべきオブジェクトのタイプのようなものですか? – DS87

+0

patchEntity内の最初のパラメータは、保存できるデータを定義するために使用されます。データベーステーブルの可能なすべての列を持つスケルトンのようなものです。 – CodeWhisperer

関連する問題