2012-04-01 9 views
0

Ich habe zwei Modelle:CakePHP - Nur eine Abfrage von einem externen Modell

class Post extends AppModel { 
    var $name = 'Post'; 
    var $belongsTo = array(
     'User' => array(
      'className' => 'User', 
      'foreignKey' => 'user_id' 
     ) 
    );  
} 

und

class User extends AppModel { 
    var $name = 'User'; 
    var $hasMany = 'Post'; 
} 

Jetzt bin ich ein Problem mit einer Abfrage in den PostsController habe. Ich habe eine add() Funktion und die Ansicht add.ctp, die im Grunde eine Form ist. Jetzt möchte ich einige Benutzerinformationen in diesem Formular zeigen.

class PostsController extends AppController { 
    var $name = 'Posts'; 
    var $helper = array('Html', 'Form'); 
    var $uses = array('User'); 

    public function index() { 
     $this->set('posts', $this->Post->find('all')); 
    } 

    function add() { 
     $user_id = 1; 
     $this->set('user', $this->User->findById($user_id)); 
     if ($this->request->is('post')) { 
      if ($this->Post->save($this->request->data)) { 
       $this->Session->setFlash('Your post has been saved.'); 
       $this->redirect(array('action' => 'index')); 
      } else { 
       $this->Session->setFlash('Unable to add your post.'); 
      } 
     } 
    } 
} 

Aber jetzt die Add-View-Seite zeigt, dass tatsächlich zwei Abfragen ausgelöst wurden. Also wenn ich print_r($user) innerhalb der Add-View bekomme ich ein Array mit zwei Arrays. Ein für einen Beitrag mit user_id = 1 und ein für den tatsächlichen Benutzer mit id = 1. Aber ich würde nur die Benutzer-ID = 1

+0

Ich kann die var '$ user' nicht finden –

+0

Woher willst du den User mit ID 1 bekommen? In 'PostsController :: add()'? –

+0

Tut mir leid, '$ user' ist aus Sicht, ich bin richtig? –

Antwort

2

bekommen versucht recursive zu false auf das User Modell Einstellung vor findById Aufruf, so Sie erhalten keine Daten von zugeordneten Modellen. Gefällt mir:

function add() { 
    $user_id = 1; 
    $this->User->recursive = false; 
    $this->set('user', $this->User->findById($user_id)); 
    if ($this->request->is('post')) { 
     if ($this->Post->save($this->request->data)) { 
      $this->Session->setFlash('Your post has been saved.'); 
      $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash('Unable to add your post.'); 
     } 
    } 
} 
+0

Danke! Jetzt ist nur das Benutzer-Array in der Ansicht verfügbar, aber wenn ich jetzt das von der Add-View speichere, erhalte ich einen Fatal-Fehler: Aufruf einer Member-Funktion save() auf einem Nicht-Objekt in /home/app/Controller/PostssController.php in Zeile 17. –

+0

Ist Zeile 17 diese: '$ this-> Post-> speichern ($ this-> request-> data)'? Wenn dies der Fall ist, bedeutet dies, dass das Modell "Post" nicht gefunden werden kann, was sehr seltsam ist (es sollte automatisch verfügbar sein). Sie können es jedoch immer zum Array $ uses am oberen Rand des Controllers hinzufügen. Es gibt etwas Seltsames an Ihrem Benennungsschema, das dazu führen könnte, dass Cake das Modell nicht findet: Ist Ihre Controller-Datei wirklich 'PostsController.php', mit zwei' s'? – bfavaretto

+0

Diese beiden sind gerade passiert, weil ich die Datei in diesem Fehler versehentlich umbenannt habe. Aber dein Recht, wenn ich Post zu $ ​​hinzufüge, nutzt aus irgendeinem Grund erst dann seine Arbeit und die Daten werden gespeichert. Wie du schon gesagt hast sollte Post eigentlich schon in PostsController verfügbar sein. Ich habe keine Ahnung. –

Verwandte Themen