Получение моделей без получения связанных моделей - CakePHP - PullRequest
9 голосов
/ 07 апреля 2011

Я использую функцию find ('all') для извлечения записей записей из моей базы данных, но она также возвращает всю информацию о пользователе, связанную с моделью Post с отношением ownTo - hasMany.

Недостатком является то, что модель пользователя содержит пароль и другую важную информацию.Считается ли это проблемой безопасности?Я нигде не отображаю информацию о представлении.

Спасибо


РЕДАКТИРОВАТЬ:

Я изменил свой код, но я все ещеполучать связанные модели.

        $this->set('posts_list',$this->Post->find('all',array('contain' => false, 'order' => array('Post.price ASC'))));

Есть идеи?

Ответы [ 4 ]

27 голосов
/ 07 апреля 2011

У вас есть несколько вариантов.Вы можете установить свойство recursive для модели:

$this->Post->recursive = -1;
$posts = $this->Post->find('all');

В качестве альтернативы вы можете указать recursive в качестве опции для поиска:

$posts = $this->Post->find('all', array(
    'recursive' => -1,
    'conditions' => ...
);

Вы также можете использоватьContainable поведение в вашей модели Post.В этом случае вы можете указать пустой набор:

class Post extends AppModel {
    var $actsAs = array('Containable');
}

$this->Post->contain();
$posts = $this->Post->find('all');

Или, указанный в запросе:

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

Достоинство для поведения Containable - это когда вы позже связываете другиемодели с вашим постом.Предположим, что вы реализуете модель Tag.Теперь вы хотите найти сообщение с его тегами, но не с моделью использования:

$posts = $this->Post->find('all', array(
    'contain' => array('Tag'),
);
5 голосов
/ 07 апреля 2011

Не обязательно.

Но вы получаете информацию, когда она вам не нужна. Сейчас это не проблема, но имейте в виду, что это становится огромной проблемой, когда у вас много связанных данных

Рекомендуется установить для атрибута recursive значение -1 (или 0, если необходимо)

$this->Model->recursive = -1;

Это будет получать данные только от выбранной модели

Или для более точно настроенного выделения вы можете использовать поведение Containable: http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

Это позволяет вам выбирать, какие ассоциации сохранять при получении данных.

2 голосов
/ 03 июля 2014

просто чтобы вы знали

$this->Model->recursive = -1 will remove all associations
$this->Model->recursive = 0 will remove only hasMany assosiation (so it keeps belongsTo)
0 голосов
/ 07 апреля 2011

Используете ли вы это:

$this->Post->find('all')// If u access it from Post controller

OR

$this->User->Post->find('all')//If u access it from User controller
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...