Nano Hash - криптовалюты, майнинг, программирование

CakePHP 3 - исключать поля по умолчанию в запросе, если они не выбраны специально

Название в значительной степени говорит само за себя. У меня есть несколько таблиц с полями, которые содержат много данных. Чтобы сохранить некоторую производительность, я бы не хотел ВЫБИРАТЬ их по умолчанию.
Акцент на новом поведении по умолчанию, отличающем вопрос, например, от. Выбрать все поля, кроме одного, в запросе cakephp 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().


  • Отвечает ли это на ваш вопрос? Выбрать все поля, кроме одного, в запросе cakephp 3 02.03.2020
  • Частично я не знал, что функция selectAllExcept существует. Оставшаяся часть моего квеста — как использовать по умолчанию, см. примеры. 02.03.2020
  • прочитайте book.cakephp.org/3/en/orm/table -objects.html#beforefind и поместите этот метод; 02.03.2020
  • Я подумал, что это может произойти, но тогда у меня не будет альтернативных операторов выбора в конкретных случаях использования. Например. если использовать соединение для этой таблицы откуда-то еще и ThisTable.id включено из-за beforeFind, любое SUM или COUNT может сломаться. 02.03.2020
  • И как теперь выглядит ваш код? 03.03.2020

Ответы:


1

Вы можете просто перезаписать метод find('all') в своей таблице.

Например, в UsersTable:

public function findAll(Query $query, array $options)
{

    $query->selectAllExcept($this, ['password']);

    return $query;
}

затем в вашем контроллере:

// select all except password
$users = $this->Users->find();
debug($users);

OR

// we try to select some fields, without success
$users = $this->Users->find()->select(['id', 'username', 'password']); 
debug($users);

OR

// we try to select some fields incl. password, with success
$users = $this->Users->find()->select(['id', 'username', 'password'], true); // <-- this overwrite select / selectAllExcept in custom finder
debug($users);
04.03.2020
  • А, это тоже может сработать. Может вы опечатку сделали? В чем разница между двумя последними линиями контроллера? 04.03.2020
  • последний пример выбора имеет второй параметр, установленный на перезапись true. api.cakephp.org/3.8/class-Cake.Database. Запрос.html#_select 04.03.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..