2010-11-24 27 views
0

Ich habe meinen Kopf gegen die Wand mit einem wirklich nervigen Problem geschlagen. Ich habe zwei Modellklassen:: Modell Rekursion schlägt fehl

class User extends AppModel { 
    var $name = 'User'; 
    var $hasMany = array(
     'Application' => array(
      'className' => 'Application', 
      'foreignKey' => 'user_id', 
      'dependent' => false, 
     ) 
    ); 
} 

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

Ich möchte Anwendungen und die damit verbundenen Felder des Benutzers ziehen.

$this->Applications->find(); 

Egal, was stelle ich $ rekursiv, es mir nur einen Ausgang nach wie vor ist zu geben:

Array 
(
    [Applications] => Array 
     (
      [id] => 1 
      [user_id] => 3 
      [datecreated] => 
      [status] => 
      [source] => 1 
     ) 

) 

Auf der anderen Seite, wenn ich die Daten aus Tabelle Benutzern mit rekursiven Satz 2 ziehen, Ich bekomme alle Benutzer mit ihren Anwendungen MIT den Benutzerdaten, die mit der Anwendung verbunden sind, mit den Anwendungen, die dem Benutzer zugeordnet sind. Um es schlicht und einfach, hier ist was ich bekommen:

Array 
(
    [0] => Array 
     (
      [User] => Array 
       (
        [id] => 3 
        [email] => [email protected] 
        [password] => hashstring 
        [socialsecurityno] => 21232134123 
        [role_id] => 3 
        [firstname] => Firstname 
        [lastname] => Lastname 
        [status] => 1 
       ) 

      [Application] => Array 
       (
        [0] => Array 
         (
          [id] => 1 
          [user_id] => 3 
          [datecreated] => 
          [status] => 
          [source] => 1 
          [User] => Array 
           (
            [id] => 3 
            [email] => [email protected] 
            [password] => hashstring 
            [socialsecurityno] => 21232134123 
            [role_id] => 3 
            [firstname] => Firstname 
            [lastname] => Lastname 
            [status] => 1 

            [Application] => Array 
             (
              [0] => Array 
               (
                [id] => 1 
                [user_id] => 3 
                [datecreated] => 
                [status] => 
                [source] => 1 
               ) 

             ) 

           ) 



         ) 

       ) 

     ) 
) 

Was ich will, ist von den Anwendungen zu bekommen, ihr zugeordneten Benutzerinformationen und das ist es. Ich habe ziemlich viele Ideen, um eine Beziehung zwischen Anwendungen und Benutzern zu erstellen, die technisch falsch wäre, da ein Benutzer viele Anwendungen haben kann, aber eine Anwendung nur einen Benutzer hat.

Im Moment ist Anwendungen mit Benutzern über user_id in der Anwendungstabelle verbunden, die ... sollte offensichtlich sein, aber wahrscheinlich sollte sowieso beachtet werden.

Jede Art von Hilfe mit diesem könnte geschätzt werden, ich bin buchstäblich aus Ideen.

Antwort

0

Wenn Model::find ohne Parameter aufgerufen wird, behandelt Kuchen es, als ob Sie diese Anfrage gemacht:

Model::find('first',array('limit'=>1)); 

Dies erklärt, warum es nur ist die erste Anwendung abgerufen werden. Um alle Anwendungen abrufen, ändern Ihren Anruf:

$this->Application->find('all'); 

Diese nicht erklären, warum Model::find ignorieren das recursive Einstellung des Modells, und in der Tat, ich kann nicht einen Weg finden, um dieses Problem zu reproduzieren, es sei denn, Es ist etwas albern, wie Sie den Modellnamen bei der Einstellung der Rekursionsstufe (z. B. $this->Applications->recursive = 1;; beachten Sie die Pluralisierung von "Application").

Hoffe, das hilft.

+0

Das Problem besteht nicht darin, mehr als eine Anwendung abzurufen, ich bin mir bewusst, dass die Suche einen Parameter erfordert, um mehr als eine abzurufen. Zu Testzwecken gibt es nur eine Anwendung in der Datenbank. Das Problem besteht darin, die zugehörigen Modelle abzurufen. Ich werde jedoch jedes mögliche Szenario, das ich falsch gemacht habe, durchgehen und sehen, ob ich etwas finden kann. – NeroS