我有4个模特:
Company
型号:
class Company extends AppModel {
public $hasMany = "User";
}
User
型号:
class User extends AppModel {
public $belongsTo = "Company";
public $hasMany = array("Post", "Comment");
}
Post
型号:
class Post extends AppModel {
public $actsAs = array('Containable');
public $belongsTo = "User";
public $hasMany = "Comment";
}
Comment
型号:
class Comment extends AppModel {
public $belongsTo = array("User", "Post");
}
在PostsController.php
中,我有:
class PostsController extends AppController {
public function index() {
$this->set('posts', $this->Post->find('all'));
}
public function view($id) {
//$post = $this->Post->findById($id); // does not retrieve extra information
//$post = $this->Post->find('first', array('conditions' => array('Post.id' => $id), 'recursive' => 2)); // does retrieve too much extra information
$post = $this->Post->find('first', array('conditions' => array('Post.id' => $id), 'contain' => array('Company.nom'))); // Warning (512): Model "Post" is not associated with model "Company"
$this->set('post', $post);
}
}
在我的Post
视图中,我在使用递归方式时进行调试:
Array
(
[Post] => Array
(
[id] => 1
[user_id] => 1
[content] => Hello world !
)
[User] => Array
(
[id] => 1
[company_id] => 2
[name] => John DOE
[Company] => Array
(
[id] => 2
[nom] => Apple
)
[Post] => Array
(
[0] => Array
(
[id] => 1
[user_id] => 1
[content] => Hello world !
)
)
[Comment] => Array
(
[0] => Array
(
[id] => 1
[user_id] => 1
[post_id] => 1
[content] => This is a comment
)
[1] => Array
(
[id] => 2
[user_id] => 1
[post_id] => 1
[content] => This is another comment
)
)
)
[Comment] => Array
(
[0] => Array
(
[id] => 1
[user_id] => 1
[post_id] => 1
[content] => This is a comment
[User] => Array
(
[id] => 1
[company_id] => 2
[name] => John DOE
)
[Post] => Array
(
[id] => 1
[user_id] => 1
[content] => Hello world !
)
)
[1] => Array
(
[id] => 2
[user_id] => 1
[post_id] => 1
[content] => This is another comment
[User] => Array
(
[id] => 1
[company_id] => 2
[name] => John DOE
)
[Post] => Array
(
[id] => 1
[user_id] => 1
[content] => Hello world !
)
)
)
)
如何使用Containable检索Company
信息的好方法?
我的问题似乎与this one非常相似。
答案 0 :(得分:0)
你错过了
public $actsAs = array('Containable');
在您的模型中,例如
class Post extends AppModel {
public $actsAs = array('Containable');
}
你必须按照答案中给出的链接来实现。我会为你paste it here。
而且发现就像
$post = $this->Post->find('first', array('conditions' => array('Post.id' => $id),
'contain' => array('User' => array('Company'))));
应该阅读相关文档,它有很多例子。