CakePHP: Ограничение полей, связанных с моделью
У меня есть несколько полей в некоторых таблицах базы данных, которые моим моделям CakePHP никогда не нужно извлекать. Есть ли какой-нибудь способ установить набор полей по умолчанию для выборки на уровне модели? Например, я извлекаю некоторые данные из базы данных, разработанной третьей стороной, которая содержит 50 полей в таблице, я использую 5.
Я знаю, что могу устанавливать ограничения на поля во время запроса find() и во время любых ассоциаций между моделями, но мне было интересно, существует ли подход на уровне модели.
1 answers
CakePHP не предлагает то, что вы описываете на уровне модели из коробки. То есть нет никакого модельного свойства defaultFields
, которое используется на каждом find()
Как вы заметили, вы можете указать это на уровне ассоциации, установив свойство fields
. Однако это будет работать только в том случае, если вы извлекаете модель через одно из этих отношений.
В конце концов, вы собираетесь установить это в своем find()
. Вы могли бы свести к минимуму повторение, добавив свойство вашей модели примерно так:
var $defaultFields = array('Model.field1', 'Model.field2', ...);
Затем в вашем find()
:
$this->Model->find('fields' => $this->Model->defaultFields, ...);
Это имеет очевидные ограничения, но, по крайней мере, обеспечивает некоторую инкапсуляцию и, следовательно, гибкость.
Примечание: Более инвазивный подход мог бы использовать beforeFind();
. В этом случае вам не нужно будет корректировать каждый find()
. Но ваш пробег может варьироваться в зависимости от вашего использования.