使用多个模型Find()CakePHP
我有这些桌子: 表:创建者 注:我也试过这样做: 表:帖子 CreatorModel.php使用多个模型Find()CakePHP,php,cakephp,Php,Cakephp,我有这些桌子: 表:创建者 注:我也试过这样做: 表:帖子 CreatorModel.php class CreatorModel extends AppModel { public $actsAs = array('Containable'); public $hasOne = array('Post'); } class PostModel extends AppModel { public $actsAs = array('Containable');
class CreatorModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class PostModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Creator');
}
$this->set('posts', $this->Post->find());
var_dump($posts);
class Creator extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class Post extends AppModel {
public $actsAs = array('Containable');
public $belongsTo= array('Creator');
}
$this->set('posts', $this->Post->find('all', array('contain'=>array('Creator')));
PostModel.php
class CreatorModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class PostModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Creator');
}
$this->set('posts', $this->Post->find());
var_dump($posts);
class Creator extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class Post extends AppModel {
public $actsAs = array('Containable');
public $belongsTo= array('Creator');
}
$this->set('posts', $this->Post->find('all', array('contain'=>array('Creator')));
IndexController.php
class CreatorModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class PostModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Creator');
}
$this->set('posts', $this->Post->find());
var_dump($posts);
class Creator extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class Post extends AppModel {
public $actsAs = array('Containable');
public $belongsTo= array('Creator');
}
$this->set('posts', $this->Post->find('all', array('contain'=>array('Creator')));
index.ctp
class CreatorModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class PostModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Creator');
}
$this->set('posts', $this->Post->find());
var_dump($posts);
class Creator extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class Post extends AppModel {
public $actsAs = array('Containable');
public $belongsTo= array('Creator');
}
$this->set('posts', $this->Post->find('all', array('contain'=>array('Creator')));
在关于关联的CakeBook会议之后
我应该得到这样的答复:
Array
(
[Post] => Array
(
[id] => 1
[creator_id] => 1
[tags] =>
[title] => Teste
[post] => Maromba
[created] => 2013-04-29 19:14:32
[modified] => 2013-04-29 19:14:32
)
[Creator] => Array
(
[creator_id] => 1
[creator] => Alexandre Moraes
)
)
但我收到的是:
Array
(
[Post] => Array
(
[id] => 1
[creator_id] => 1
[tags] =>
[title] => Teste
[post] => Maromba
[created] => 2013-04-29 19:14:32
[modified] => 2013-04-29 19:14:32
)
)
那么,你知道我做错了什么吗?你需要为你的模型设置正确的关系。实际上,您希望在两个表之间进行连接。看看这个答案:我相信这和你想做的很相似 快速脏版的外观如下所示:
$this->Post->find('all', array(
'joins' => array(
array(
'table' => 'creators',
'alias' => 'CreatorJoin',
'type' => 'inner',
'conditions' => array(
'CreatorJoin.id = Post.creator'
)
)
)
);
但我建议阅读我链接的完整答案,并使用第一个(更正确的)示例。在db中
CREATORS TABLE
---
id | creator
Creator.php
class CreatorModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class PostModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Creator');
}
$this->set('posts', $this->Post->find());
var_dump($posts);
class Creator extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class Post extends AppModel {
public $actsAs = array('Containable');
public $belongsTo= array('Creator');
}
$this->set('posts', $this->Post->find('all', array('contain'=>array('Creator')));
Post.php
class CreatorModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class PostModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Creator');
}
$this->set('posts', $this->Post->find());
var_dump($posts);
class Creator extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class Post extends AppModel {
public $actsAs = array('Containable');
public $belongsTo= array('Creator');
}
$this->set('posts', $this->Post->find('all', array('contain'=>array('Creator')));
请注意Post.php中模型的命名和关联类型
IndexController.php
class CreatorModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class PostModel extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Creator');
}
$this->set('posts', $this->Post->find());
var_dump($posts);
class Creator extends AppModel {
public $actsAs = array('Containable');
public $hasOne = array('Post');
}
class Post extends AppModel {
public $actsAs = array('Containable');
public $belongsTo= array('Creator');
}
$this->set('posts', $this->Post->find('all', array('contain'=>array('Creator')));
进行这些更改后,返回的数组应该是您期望的数组。您需要阅读cakephp文档并遵循数据库中的约定(这样更容易),在表
creators
@nuns中更改创建者id
的id
,仍然是相同的响应。。。没有“Creator”键,我已经编辑了我的问题,显示了我在CakeBook后面的内容。即使有你发送的链接,我也无法让它工作。有什么想法吗?还要更改模型文件的名称(在我的答案中更改)@Alexandre您可能想阅读cakephp手册中的这一章:。本章介绍如何命名类、数据库表和字段,以便CakePHP“自动”理解它们。