CakePHP模型关系,如何避免不必要的数据?

时间:2011-11-14 03:13:24

标签: cakephp

我正在学习CakePHP,因此我正在创建一个简单的博客,以便学习基本功能,这个博客将有表格,包含帖子,用户,用户激活码和分类以及帖子和标签之间的分类关系。

好的,现在的事情是,我已经设法正确设置了所有内容,每次我获取帖子时,都会返回大量数据:

Array
(
    [Post] => Array
    (
        [post_id] => 1
        [post_title] => Test 1
        [post_nice_name] => test-1
        [post_author] => 1
        [post_content] => I'm testing this piece of crap.
        [post_creation_time] => 2011-11-13 22:50:05
        [post_last_modification] => 2011-11-13 22:50:05
        [post_allow_comments] => 1
        [post_allow_trackback] => 1
        [post_display] => 1
    )

    [User] => Array
    (
        [user_id] => 1
        [user_email] => XX@XXXXXXXXXXx.XX.XX
        [user_password] => XXXXXXXXXXXXXXXXXX
        [user_creation_time] => 2011-11-13 10:48:10
        [user_last_login] => 2011-11-13 22:49:21
        [user_birthday] => 1993-08-24 03:00:00
    )

    [TaxonomyTags] => Array
    (
        [0] => Array
        (
            [tag_id] => 1
            [tag_name] => test1
            [tag_description] => This tag is a test
            [PostsTaxonomyTag] => Array
            (
                [relation_id] => 1
                [post_id] => 1
                [taxonomy_tag_id] => 1
            )    
        )
        [1] => Array
        (
            [tag_id] => 2
            [tag_name] => test2
            [tag_description] => This tag is just another test.
            [PostsTaxonomyTag] => Array
            (
                [relation_id] => 2
                [post_id] => 1
                [taxonomy_tag_id] => 2
            )    
        )
    )
)

这些数据真的没必要:我不需要PostsTaxonomyTag数组用于每个标签,也不需要那么多用户的信息,我甚至不需要一些帖子的信息!所以我想知道在传递给视图之前是否有任何方法可以过滤这些信息。

2 个答案:

答案 0 :(得分:3)

您可以取消绑定查找功能的模型以防止不需要的数据

$this->Model->unbind(array('hasMany' => array('assocModel')));

我更喜欢使用大多数模型的可包含行为,这会强制您在查找时声明您需要的关系。仔细检查有关该行为的文档。

$this->Model->find(
    'all', 
    array(
        'conditions' => array(
            //set conditions
        ),
        'contain' => array(
            'Model2',
            'model3'
        )
    )
);

您可以在可容纳的集合中设置条件,顺序等,使其能够准确获取您需要的数据。

答案 1 :(得分:1)

...或者您可以在查找选项中使用'recursive' => -1