2012-04-11 10 views
0

Ich habe einen Upload-Controller, der Video-Dateiformate verarbeitet. Im Upload-Controller können Sie alle hochgeladenen Videos durchsuchen und ansehen. In der Funktion watch habe ich ein comments-Element, das die comments-Tabelle mit der userid aktualisiert (comment left von dem Benutzer, der gerade angemeldet ist) uploadid (hochgeladen, der gerade beobachtet wird) und dem Kommentar (Kommentar des Benutzers).CakePHP 2.0 - 2.1, Abfrage anderes Modell von Controller

Ich habe das Formular funktioniert perfekt, aber ich bin nicht sicher, wie ich die Informationen aus der Kommentartabelle erhalten würde, wie die notwendige Abfrage implementiert werden?

Irgendwelche Vorschläge?

Antwort

1

Ich sah Ihren anderen Beitrag CakePHP Elements not updating table, so dass ich irgendwie eine Vorstellung von Ihrer Situation habe. Es scheint, dass Sie Kommentare mit Ihrem Post-Modell darstellen.

Sie möchten Daten von Ihrem Post-Modell, in Ihrem UploadsController, korrigieren?

Wenn Ihre Kommentartabelle comments heißt, müssen Sie sicherstellen, dass sie mit Ihrem Post-Modell verknüpft ist. Cake ordnet Modelle und Datenbanktabellen automatisch zu, wenn sie den Namenskonventionen von Cake folgen. Aber wenn sie in der Tat unterschiedlich sind, können Sie eine benutzerdefinierte Datenbanktabelle für Ihren Beitrag Modell angeben:

<?php 
class Post extends AppModel { 

    var $useTable = "comments" /*Or whatever you named your comments table*/ 

    ... 
} 
?> 

Sie müssen auch die Modell Verbände gewährleisten zwischen Post und Hochladen einrichten:

Post belongsTo Upload 
Upload hasMany Post 

Ich bemerkte, Sie haben:

Gibt es einen Grund, warum es HABTM ist? HABTM impliziert, dass derselbe Beitrag zu vielen verschiedenen Uploads gehören kann. hasMany impliziert, dass ein Beitrag nur zu einem einzelnen Upload gehören kann.

Schließlich nun, dass die Modellverbände eingerichtet sind, können Sie ähnliche Modelle in einem Controller zugreifen:

<?php 
class UploadsController extends AppController { 

    ... 

    function watch ($id = null) { 

     $this->Upload->id = $id;  
     $this->set('uploads', $this->Upload->read()); 

     /* To get related comments (Posts) */ 
     $related_comments = $this->Upload->Post->find('all', array(
      'conditions' => array(
       'Upload.id' => $id /* This condition makes it so only associated comments are found */ 
      ) 
     )); 
     $this->set('comments', $related_comments); 
    } 

    ... 

} 
?> 
+0

Dank für die Beantwortung, verwende ich die HABTM denn wenn ich hasMany verwende ich einen Fehler Datenbankfehler erhalten Fehler: SQLSTATE [23000]: Integritätseinschränkungsverletzung: 1052 Spalte 'uploadid' in Where-Klausel ist mehrdeutig Mit dem $ related_comments erhalte ich den folgenden Fehler; Fataler Fehler: Aufruf einer Memberfunktion find() auf einem Nicht-Objekt in /Applications/XAMPP/xamppfiles/htdocs/evolvids/app/Controller/UploadsController.php in Zeile 57 Außerdem habe ich die Kommentartabelle verschrottet und Modell und nannte es einfach Posts, irgendwelche Ideen? – 001221

+0

ok Ich habe den Datenbankfehler jedoch erstellt (und ich erinnere mich, dass dies der ursprüngliche Grund war, warum ich HABTM verwendet habe), die von der Datenbank stammenden Informationen werden dreimal auf der Seite dupliziert, wenn die hasMany-Anweisung verwendet wird? Ich verstehe nicht, warum das passiert, ich habe die Grenze auf 1 gesetzt, und das macht auch keinen Unterschied, irgendwelche Ideen, warum das passiert? – 001221

+0

aber keine Sorgen, denn wenn ich es zu $ ​​this-> Post anstelle von $ dies-> Upload-> Post es funktioniert perfekt! und ich behielt mit dem ursprünglichen HABTM wegen der doppelten Einträge, die es auf der Seite macht. Danke für deine Hilfe :) – 001221