2010-11-27 87 views
3

我有以下關係:只選擇關聯模型的某些字段CakePHP中

  • User的hasMany UserNotification
  • Notification的hasMany UserNotification
  • UserNotification屬於關聯UserNotification

  • notifications表有以下欄目:idsubjectcontent

  • users_notifications表有以下欄目:iduser_idnotification_idstatus

UsersController,我怎麼可以檢索從一個用戶的所有通知? (這意味着,每個通知的所有這些細節:主題,內容和狀態)。

而且,我該如何限制返回的字段數?當我從UsersController發出請求時,我不想從find()數組中的用戶模型中檢索任何字段。

謝謝!

回答

3

爲了獲取從UsersController通知,只要做到這一點:

$notifications = $this->User->Notification->find('all'); 

基本上,你可以使用關聯訪問通知模型。

接下來,爲了限制這些字段,您可以通過兩種方法來解決這個問題。首先將$遞歸屬性設置爲-1。

如果您希望它在整個應用程序中隨處可見,請在Notification模型中使用此行。如果你想讓它發生在每個模型上,請在AppModel中使用它。

var $recursive = -1; 

你也可以將下面的行上述發現()語句之前:

$this->User->Notification->recursive = -1; 

第二種方法是使用Containable行爲。

將在通知模型下面的行(或AppModel全球影響):

var $actsAs = array('Containable'); 

現在,默認情況下,它不會拉用戶模型。但是,如果你曾經想它與通知數據一起拉,然後將查詢應該是這樣的:

$notifications = $this->User->Notification->find('all', array(
    'contain' => array('User') 
); 

希望這有助於!

+0

它的確如此。謝謝! – linkyndy 2010-11-28 15:09:20