2010-11-27 10 views
3

で、関連するモデルから選択するだけで、特定のフィールド:CakePHPの

  • User hasManyのUserNotification
  • Notification hasManyのUserNotification
  • UserNotification belongsToのUserNotification

  • notificationsテーブルあり次の列:idsubjectcontent

  • users_notificationsテーブルには、次の列があります:iduser_idnotification_idstatusUsersController

、私は一人のユーザからのすべての通知を取得することができますか? (つまり、通知ごとに、これらの詳細すべて:件名、内容、ステータス)。

また、返されるフィールドの数を制限するにはどうすればよいですか? UsersControllerから要求を出しているので、find()配列のUserモデルからフィールドを取得する必要はありません。

ありがとうございました!がUserControllerからの通知を取得するために

答えて

3

、単純に次の操作を行います。

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

基本的に、あなたは通知モデルにアクセスするための関連付けを使用することができます。

次に、フィールドを制限するために、2つの方法でこれにアプローチできます。まず、$ recursiveプロパティを-1に設定します。

通知モデルでこの行を使用すると、アプリケーション全体でこの行が使用されます。あなたがそれがすべてのモデルのために起こりたい場合は、AppModelでそれを使用してください。

var $recursive = -1; 

また、前述のfind()文の前に次の行を置くことができる:

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

第二の方法はContainable動作を使用することであろう。 (グローバル効果のためかのAppModel)あなたの通知モデルで

置き、以下の行を:

var $actsAs = array('Containable'); 

さて、デフォルトでは、それはUserモデルを引っ張らないでしょう。しかし、通知データと一緒にそれを取得したい場合は、クエリは次のようになります。

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

これは役に立ちます。

+0

です。ありがとうございました! – linkyndy