Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用多个模型Find()CakePHP_Php_Cakephp - Fatal编程技术网

使用多个模型Find()CakePHP

使用多个模型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');

我有这些桌子:

表:创建者

注:我也试过这样做:

表:帖子

CreatorModel.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')));
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“自动”理解它们。