CakePHP модель отношений, как избежать ненужных данных? - PullRequest
0 голосов
/ 14 ноября 2011

Я изучаю 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 ]

3 голосов
/ 14 ноября 2011

Вы можете отменить привязку моделей к функции поиска, чтобы предотвратить ненужные данные

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

Я предпочитаю использовать сдерживаемое поведение для большинства моделей, что заставляет вас указывать отношения, которые вам нужны при поиске. Проверьте документы об этом поведении.

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

Вы можете установить условия, порядок и т. Д. В составе набора, который делает его эффективным для получения именно тех данных, которые вам нужны.

1 голос
/ 14 ноября 2011

... или вы можете просто использовать 'recursive' => -1 в опциях поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...