2013-05-06 77 views
1

我對mongodb,model cakephp和關係有疑問。cakephp和mongodb - 關係

我想創建下列關係:

用戶 - >的hasMany - >市
市 - >屬於關聯 - >用戶

在MongoDB中,我有兩個表:

用戶 城市(帶密鑰user_id)

在cakephp中,我有2個模型: user.php的

類用戶延伸模型{
公共$名= '用戶';
public $ actsAs = array('Containable');
public $ hasMany = array('City');
..
}

和: City.php

級城市擴展模式{
公共$ NAME = '城市';
public $ actsAs = array('Containable');
public $ belongsTo = array('User');
.. }

在我的控制器使用:

$ USER = $這個 - >用戶 - >找到( '所有');

但它不起作用。在sql轉儲中,cakephp僅使用tbl用戶的查找。 爲什麼?我錯在哪裏?

回答

0

我通常將遞歸設置爲-1並且可以在應用模型中包含,因此它適用於您創建的所有模型,除非您專門覆蓋。

class AppModel extends Model { 
    public $actsAs = array('Containable'); 
    public $recursive = -1; 
} 

你的關係很好,雖然我通常添加className和foreignKey只是爲了安全和清晰。在你的控制器,你應該做這樣的事情:

$users = $this->User->find('all', array(
    'contain' => array(
     'City' 
    ) 
)); 

遞歸將防止被默認包含任何相關記錄,這是件好事,因爲有時候你不需要的遞歸數據和額外的數據將幫助您的應用程序變慢。

接下來將添加內容添加到您的查找調用中可能看起來像一件苦差事,但它會清晰簡潔地查詢您的內容,任何第三方開發人員如果知道如何使用Cake,就會完全理解您在做什麼。希望這可以幫助。

+0

mmhm,對不起!我嘗試你的建議,但我的輸出不起作用。

 db.users.find({"_id":ObjectId ("518266026803fa1d4a000002")}, []).sort([]).limit(1).skip(0)
:( – diema 2013-05-08 17:42:51