Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Speichern von Associations in CakePHP3

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Speichern von Associations in CakePHP3

    Hallo,

    ich habe ein Problem mit CakePHP3 und dem speichern von neuen Entity und deren Associations.

    Ich bekomme einfach die Associations nicht gespeichert, obwohl ich mMn alles nach der Anleitung in den Docs mache. Hier der Code:

    Der Controller
    PHP-Code:
            $articles TableRegistry::get('Articles');       
            
    $article $articles->newEntity($this->request->data);  
                            
            if (
    $this->request->is('post')) {            
                
                
    $valid $articles->validate($article, [
                    
    'associated' => ['Topics']
                ]);
                
                if ( 
    $valid ) {
                    
    $articles->save($article, [
                        
    'validate' => false,
                        
    'associated' => ['Topics']
                    ]);
                }
            } 
    Hiere meine TableModels:
    PHP-Code:
    class ArticlesTable extends Table {   
        public function 
    initialize(array $config) {        
            
    $this->primaryKey('article_id');
            
    $this->belongsTo 'Topics', [
                
    'targetForeignKey'  => 'topic_id'
            
    ]);
        }
    }

    class 
    TopicsTable extends Table {  
        public function 
    initialize(array $config) {        
            
    $this->primaryKey('topic_id');  
            
    $this->hasMany 'Articles', [
                
    'targetForeignKey'  => 'article_id'
            
    ]);    

    Die Datenbank schaut so aus:
    Code:
    CREATE TABLE `articles` (
      `article_id` int(11) NOT NULL AUTO_INCREMENT,
      `topic_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`article_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1;
    
    CREATE TABLE `topics` (
      `topic_id` int(11) NOT NULL AUTO_INCREMENT,
      `topic_title` varchar(45) DEFAULT NULL,
      PRIMARY KEY (`topic_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    Auf der Clientseite erstelle ich ein Formular, welches so aussieht:
    HTML-Code:
    <input type="text" id="articles-heading" maxlength="45" required="required" name="Articles[heading]">
    <input type="text" id="articles-topics-topic-title" list="topics" name="Articles[Topics][topic_title]">
    Ich habe vorher nur bei Abfragen mit Associations gearbeitet und dachte durch das hinzufügen der Flags in der save-Methode in Verbindung mit den Angaben in den Models, müsste es doch eigentlich funktionieren.

    Das Script wird ohne Fehlermeldungen ausgeführt. Im Debug erscheint nur dass Articles befüllt wird. Die andere Tabelle wird ignoriert.

    Hat jemand eine Idee wie es funktioniert?

  • #2
    Mister Ad, kannst du endlich aufhören deinen blöden Spam in jeden Artikel zu hauen. Seit 2005 spamst du hier das ganze Forum zu und niemand unternimmt was dagegen. Schäm dich!

    Kommentar


    • #3
      Mister Ad, kannst du endlich aufhören deinen blöden Spam in jeden Artikel zu hauen. Seit 2005 spamst du hier das ganze Forum zu und niemand unternimmt was dagegen. Schäm dich!
      AdBlocker anstellen

      Such dochmal nach den 7897423412 Mister Ad Threads, da wirste ne Antwort drauf finde...
      https://github.com/Ma27
      Javascript Logic is funny:
      [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

      Kommentar


      • #4
        Hilft mir nocht unbedingt weiter .. XD

        Kommentar


        • #5
          Hallo,

          es funktioniert nun. Ich habe in den Associations den falschen Ausdruck gewählt. Nicht targetForeignKey sondern foreignKey. So hatte ich es bereits. Allerdings musste ich noch ein Flag für Entity Article setzen:

          PHP-Code:
          protected $_accessible = [
                  
          'topic' => true
          ]; 
          Das Formular kann ich auch wieder zurücksetzen auf meinen ersten Ansatz. Name ist quasi nun: heading und topic.topic_title.

          Damit funktioniert alles.

          Kommentar

          Lädt...
          X