モデルに関連付けを設定するとき。CakePHP は実行時にそれをインスタンス化し、そのモデルの Object プロパティとして設定します。
class User extends AppModel
{
public $hasMany = array('Document');
}
class Document extends AppModel
{
}
上記の例では。User
オブジェクトには というプロパティが含まれますが、 は含まDocument
れDocument
ませんUser
。
class UsersController extends AppController
{
public $uses = array('User');
public function index()
{
$this->User-find(...); // works
$this->User->Document->find(..); // works, because of the hasMany
$document = ClassRegistry::init('Document');
$document->User->find(...); // does not work, not associated to User.
}
}
また、プロパティの名前は関連付けのエイリアスであることに注意してください。モデル名ではありません。
class User extends AppModel
{
public $hasMany = array(
'Paper'=>array('className'=>'Document')
);
}
class Document extends AppModel
{
}
これにより、プロパティ名が次のように変更されますPaper
$this->User->Paper->find(..); // works as alias
関連付けにエイリアスを使用すると、検索条件を適用して、異なる結果を生成できます。
class User extends AppModel
{
public $hasMany = array(
'Paper'=>array('className'=>'Document','conditions'=>array(....)),
'Resume'=>array('className'=>'Document','conditions'=>array(....))
);
}
User
そのようなモデルには 2 つのプロパティが作成されます。
$this->User->Paper->find(..); // works as alias
$this->User->Resume->find(..); // works as alias
ただし、条件はUser
モデルで検索を実行する場合にのみ適用されます。