Название в значительной степени говорит обо всем. У меня есть несколько таблиц с полями, которые содержат много данных. Чтобы сохранить производительность, я бы не хотел выбирать их по умолчанию.
Акцент на новом поведении по умолчанию, отличающий вопрос от, например, Выбрать все, кроме одного поля в торте php 3 запроса
Пример:
$cities = $this->Cities->find();
// A $city does not include the field `shape` (which is a huge polygon)
$cities = $this->Cities->find(['id', 'name', 'shape']);
// A $city now does include the `shape` property
Я посмотрел на свойства accessible
и hidden
объекта, но, похоже, они не влияют на оператор SELECT.
РЕДАКТИРОВАТЬ: selectAllExcept
запрос кажется полезным. Я объединил это с событием beforeFilter
следующим образом:
public function beforeFind($event, $query, $options, $primary)
{
$query->selectAllExcept($this, ['shape']);
}
Это хорошо работает для пустых запросов, shape
теперь исключено. Но теперь у меня нет контроля над другими полями, которые могут быть включены или нет:
$this->Cities->find()->select(['id', 'shape'])
затем также выберет другие поля, потому что selectAllExcept()
.