0

私はcakephp 2アプリケーションに3つのテーブルを持っています:

users :

  • ID
  • Eメール

プロファイル:

  • ID
  • 名前
  • ユーザーID

論文:

  • ID
  • 題名
  • ユーザーID

私はこれを示します:

------------------------------------------------------------------
| user->ID |    profile -> name   | paper -> ID | paper -> title |
------------------------------------------------------------------
|   123    |        jack          |      12     |      test1     |
------------------------------------------------------------------
|   125    |        jonn          |      15     |     mypaper    |
------------------------------------------------------------------
etc.

多分ユーザーは紙を持っていません。
ユーザーには 1 つのプロファイルがあります。
ユーザーにはたくさんの紙があります。

users_controller のアクションでこれを行うにはどうすればよいですか?

4

1 に答える 1

1

それぞれのモデルでモデルの関連付けを指定するだけです。以下のファイルを app/Model フォルダーに保存します。

//User Model: User.php
App::uses('AppModel', 'Model');
class User extends AppModel
{
public $name = 'User';
public $useTable = 'users';    
public $primaryKey = 'id';
public $hasOne = array('Profile' => array(
                                          'className' => 'Profile',
                                          'foreignKey' => 'user_id'
                                          )
                       );
public $hasMany = array('Paper' => array(
                                         'className' => 'Paper',
                                         'foreignKey' => 'user_id'
                                         )
                        );
}

//Profile Model: Profile.php
App::uses('AppModel', 'Model');
class Profile extends AppModel
{
public $name = 'Profile';
public $useTable = 'profiles';    
public $primaryKey = 'id';
public $belongsTo = array('User' => array(
                                           'className' => 'User',
                                           'foreignKey' => 'user_id'
                                           )
                          );
}

//Paper Model: Paper.php
App::uses('AppModel', 'Model');
class Paper extends AppModel
{
public $name = 'Paper';
public $useTable = 'papers';    
public $primaryKey = 'id';
public $belongsTo = array('User' => array(
                                           'className' => 'User',
                                           'foreignKey' => 'user_id'
                                           )
                          );
}

ユーザーの詳細とそのプロファイルの詳細、およびすべての紙の情報を単一のクエリで簡単に見つけることができます。

$result = $this->User->find('all', array('conditions' => array()));

論文の user_id でユーザーのプロファイルの詳細を調べたい場合は、次のように記述します。

$result = $this->User->Paper('all', array('conditions' => array('Paper.user_id' => $user_id),
                                'recursive' => '2'));

次を使用して出力を確認できます。pr($result);die;

于 2012-08-27T04:22:27.070 に答える