2010-11-24 101 views
0

我一直在我的頭撞牆,一個非常惱人的問題。我有兩個模型類::模型遞歸失敗

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', 
     ) 
    ); 
} 

我想拉應用程序和與它關聯的用戶的字段。

$this->Applications->find(); 

不管我怎麼設置$遞歸來,它仍然給了我只有一個輸出:

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

) 

在另一方面,當我拉的數據從用戶表遞歸設置爲2,我將所有用戶及其應用程序與與應用程序關聯的用戶數據與與用戶關聯的應用程序相關聯。說得簡單明瞭,這裏就是我得到:

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 
               ) 

             ) 

           ) 



         ) 

       ) 

     ) 
) 

我想要什麼,是從應用程序,其相關的用戶信息獲取,這就是它。我幾乎沒有想到在應用程序和用戶之間創建habtm關係,這在技術上是不正確的,因爲一個用戶可以有很多應用程序,但一個應用程序只有一個用戶。

現在,應用程序通過應用程序表中的user_id與用戶連接,這應該是顯而易見的,但無論如何應該注意。

任何形式的幫助可以被讚賞,我真的沒有想法。

回答

0

如果Model::find被稱爲不帶參數,蛋糕把它當作好像你提出這個要求:

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

這就解釋了爲什麼它只是檢索的首次應用。要檢索所有應用程序,修改您的來電:

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

解釋爲什麼Model::find是忽略了模型的recursive設置,事實上,我無法找到一個方法來重現問題,除非在設置遞歸級別時(例如$this->Applications->recursive = 1;;請注意「應用程序」的複數化),您錯誤地指出了模型名稱。

希望這會有所幫助。

+0

問題不在於檢索多個應用程序,我完全意識到find需要一個參數來獲取多個應用程序。數據庫中只有一個應用程序用於測試目的。麻煩是檢索相關的模型。然而,我會盡全力解決我可能做錯的每一種情況,看看我能否找到任何東西。 – NeroS 2010-11-25 07:14:34