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