2016-06-21 7 views
1

Ich möchte Daten in zwei Tabellen (Artikel und Inhalt) veröffentlichen.Speichern von Daten in zwei verschiedenen Tabellen in CakePHP 3

Inhalt belongsTo Artikel (mehrere Inhalt für einen Artikel), und dies ist geschrieben in meinem ContentsTable.php

public function initialize(array $config) 
{ 
    parent::initialize($config); 

    $this->table('contents'); 
    $this->displayField('id'); 
    $this->primaryKey('id'); 

    $this->addBehavior('Timestamp'); 

    $this->belongsTo('Articles', [ 
     'foreignKey' => 'article_id', 
     'joinType' => 'INNER' 
    ]); 
} 

Jetzt möchte ich alle Inhalte in der Tabelle schreiben und auch einen Artikel erstellen.

ContentsController.php

public function add() 
{ 
    $content = $this->Contents->newEntity(); 
    $id = $this->Auth->user('id'); 

    if ($this->request->is('post')) { 
     $contents = $this->Contents->newEntities($this->request->data()); 

     foreach ($contents as $content) { 
      $content->article_id = $id; 
      $this->Contents->save($content); 
     } 

    } 

    $this->set(compact('content')); 
    $this->set('_serialize', ['content']); 
} 

Ich habe versucht, es zu tun, indem associated verwenden, aber es hat nicht funktioniert.

$content = $this->Contents->newEntity($this->request->data, [ 
      'associated' => ['Articles'] 
     ]); 
+0

"_doesn't work_" ist keine korrekte Problembeschreibung! Auch wenn das Problem für Leute offensichtlich ist, die die CakePHP-Interna kennen, sei bitte immer so genau wie möglich, was _exactly_ passiert und was du stattdessen erwartest. Zeigen Sie die Daten, mit denen Sie arbeiten (die Post-Daten), den Code, der zur Reproduktion des Problems benötigt wird (alle Entitäts-/Sicherungscodes, nicht nur den 'newEntity()' -Aufruf), Ihre Debugging-Versuche (nicht nur "Workarounds")) und mögliche Fehler (Validierungsfehler, Ausnahmen, usw.). Oft löst sich das Problem selbst beim Sammeln solcher Informationen. – ndm

Antwort

2

Versuch und Fehler führte mich zur Lösung + Lesen der Docs wieder ... und wieder.

Artikel-Controller

public function add() 
    { 
     $article = $this->Articles->newEntity(); 
     if ($this->request->is('post')) { 
      $article = $this->Articles->patchEntity($article, $this->request->data, [ 
       'associated' => [ 
        'Contents' 
       ] 
      ]); 
      // Added this line 
      $article->user_id = $this->Auth->user('id'); 

      if ($this->Articles->save($article, array('deep' => true))) {    

      } 
      $this->Flash->error(__('Unable to add your article.')); 
     } 
     $this->set('article', $article); 

    } 

-Test add.ctp in den Artikeln

echo $this->Form->hidden('contents.0.article_id'); 
       echo $this->Form->hidden('contents.0.type', ['value' => '1']); 
       echo $this->Form->hidden('contents.0.position', ['value' => '3']); 
       echo $this->Form->hidden('contents.0.text', ['value' => 'test']); 

       echo $this->Form->hidden('contents.1.article_id'); 
       echo $this->Form->hidden('contents.1.type', ['value' => '7']); 
       echo $this->Form->hidden('contents.1.position', ['value' => '7']); 
       echo $this->Form->hidden('contents.1.text', ['value' => 'test7']); 

Und fügte hinzu, dies zu meinem ArticlesTable.php

$this->hasMany('Contents');