2010-11-27 101 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