0

我有这些表:

表:创作者

**创作者**

obs.:我也试过这样:

在此处输入图像描述

表:帖子

在此处输入图像描述

CreatorModel.php

class CreatorModel extends AppModel {
    public $actsAs = array('Containable');
    public $hasOne = array('Post');
}

PostModel.php

class PostModel extends AppModel {
    public $actsAs = array('Containable');
    public $hasOne = array('Creator');
}

索引控制器.php

$this->set('posts', $this->Post->find());

索引.ctp

var_dump($posts);

在关于关联 的 CakeBook 会议之后http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

鉴于以下情况,我应该收到该回复:

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

        )
)

那么,有什么想法我做错了吗?

4

2 回答 2

2

在数据库中

CREATORS TABLE
---
id | creator

创建者.php

class Creator extends AppModel {
    public $actsAs = array('Containable');
    public $hasOne = array('Post');
}

Post.php

class Post extends AppModel {
    public $actsAs = array('Containable');
    public $belongsTo= array('Creator');
}

请注意 Post.php 中模型的命名和关联类型

索引控制器.php

$this->set('posts', $this->Post->find('all', array('contain'=>array('Creator')));

进行这些更改后,返回的数组应该是您所期望的。

于 2013-04-29T19:28:07.720 回答
0

您需要为您的模型设置正确的关系。您实际上是在寻找两个表之间的连接。看看这个答案:https ://stackoverflow.com/a/5080026/2297744我相信它与您尝试做的非常相似。

快速而肮脏的版本看起来像这样:

$this->Post->find('all', array(
    'joins' => array(
        array(
            'table' => 'creators',
            'alias' => 'CreatorJoin',
            'type' => 'inner',
            'conditions' => array(
                'CreatorJoin.id = Post.creator'
            )
        )
    )
);

但我建议阅读我链接到的完整答案并使用第一个(更正确的)示例。

于 2013-04-29T18:35:58.037 回答