CakePHP: Ограничение полей, связанных с моделью


У меня есть несколько полей в некоторых таблицах базы данных, которые моим моделям CakePHP никогда не нужно извлекать. Есть ли какой-нибудь способ установить набор полей по умолчанию для выборки на уровне модели? Например, я извлекаю некоторые данные из базы данных, разработанной третьей стороной, которая содержит 50 полей в таблице, я использую 5.

Я знаю, что могу устанавливать ограничения на поля во время запроса find() и во время любых ассоциаций между моделями, но мне было интересно, существует ли подход на уровне модели.

Author: tereško, 2011-08-30

1 answers

CakePHP не предлагает то, что вы описываете на уровне модели из коробки. То есть нет никакого модельного свойства defaultFields, которое используется на каждом find()

Как вы заметили, вы можете указать это на уровне ассоциации, установив свойство fields. Однако это будет работать только в том случае, если вы извлекаете модель через одно из этих отношений.

В конце концов, вы собираетесь установить это в своем find(). Вы могли бы свести к минимуму повторение, добавив свойство вашей модели примерно так:

var $defaultFields = array('Model.field1', 'Model.field2', ...);

Затем в вашем find():

$this->Model->find('fields' => $this->Model->defaultFields, ...);

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

Примечание: Более инвазивный подход мог бы использовать beforeFind();. В этом случае вам не нужно будет корректировать каждый find(). Но ваш пробег может варьироваться в зависимости от вашего использования.

 3
Author: Jason McCreary, 2011-08-30 13:59:10