1

これは本当に基本的な質問ですが、本では説明されていません。

find メソッドの前に複数のモデルをつなぎ合わせると、具体的にはどうなるでしょうか?

元:$stuff = $this->Article->User->find('all');

これは以下とどう違うのですか:$this->User->Article->find('all');

2つ以上できますか?$this->Book->Chapter->Author->find('all');

モデル間の関係と関係があることは明らかですが、それらはモデルで定義されていると思っていたので、何が起こっているのかわかりません。

4

1 に答える 1

5

モデルに関連付けを設定するとき。CakePHP は実行時にそれをインスタンス化し、そのモデルの Object プロパティとして設定します。

class User extends AppModel
{
      public $hasMany = array('Document');
}

class Document extends AppModel
{
}

上記の例では。Userオブジェクトには というプロパティが含まれますが、 は含まDocumentDocumentません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モデルで検索を実行する場合にのみ適用されます。

于 2013-06-05T19:23:13.263 に答える