Jump to main content Jump to doc navigation

Что такое гидратация?

Гидратация (hydration) заполняет значениями поля и связанные объекты, которые представляет xPDOObject. По умолчанию к этим полям вы обращаетесь только через методы get(), getOne() и getMany() у xPDOObject, и они должны быть описаны подходящими метаданными в map объекта. Есть несколько опций, которыми вы расширяете, как xPDO гидратирует поля и связанные объекты.

Опции передают в параметр $config конструктора xPDO:

  • xPDO::OPT_HYDRATE_FIELDS - если true, поля гидратируются как публичные свойства объекта.
  • xPDO::OPT_HYDRATE_RELATED_OBJECTS - если true, связанные объекты гидратируются как публичные свойства объекта.
  • xPDO::OPT_HYDRATE_ADHOC_FIELDS - если true, разрешены и гидратируются ad-hoc поля (также учитывает xPDO::OPT_HYDRATE_FIELDS).

Гидратация полей

Если xPDO::OPT_HYDRATE_FIELDS равен true, помимо доступа через xPDOObject::get() все поля объекта доступны для чтения напрямую как публичные свойства. Пример:

$object->set('name',$name);
echo $object->name;

Будет выведено поле name объекта, если оно описано в схеме объекта.

Это «сырые» значения Прямой доступ к полям объекта даёт только «сырое» значение, загруженное из БД, без метаданных поля и без логики метода get() вашего класса xPDOObject (или родительских классов). Рекомендуется всегда использовать get() для доступа к полям объекта, кроме случаев, когда вам нужно сырое значение или нужно обойти логику get() по конкретной причине.

Гидратация ad-hoc полей

Если xPDO::OPT_HYDRATE_ADHOC_FIELDS равен true, гидратация полей включается и для произвольных полей, не описанных в class map. Это шаг дальше: гидратируются все ad hoc поля, то есть любые поля вне схемы. Допустим, вы хотите задать произвольное поле puns у объекта Person:

$object->set('name','Arthur Dent');
$object->set('puns',42);
echo $object->get('name') .' has '. $object->get('puns') . ' puns.';

Будет выведено нужное значение, даже если поле puns не описано в схеме.

Опция учитывает xPDO::OPT_HYDRATE_FIELDS при том, делать ли ad hoc поля доступными напрямую как публичные свойства объекта.

Гидратация связанных объектов

Если xPDO::OPT_HYDRATE_RELATED_OBJECTS равен true, все связанные объекты доступны как публичные свойства объекта. По умолчанию связанные объекты доступны только через getOne или getMany у xPDOObject, но эта опция (аналогично xPDO::OPT_HYDRATE_FIELDS) делает уже загруженные этими методами связанные объекты доступными напрямую как переменные. Пример:

$fordPrefect->getMany('Beers');
foreach ($fordPrefect->Beers as $beer) {
   echo $beer->get('name').'<br />';
}

Будет выведен список всех Beers, связанных с объектом $fordPrefect и загруженных методом getMany.

Один и многие Объекты, загруженные через getOne, доступны напрямую как объект этого класса, а через getMany как массив объектов класса.

Смотрите также

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • deJaya
  • JT Skaggs
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$204 per month—let's make that $500!

Learn more