Jump to main content Jump to doc navigation

Одиночные объекты

Получив объект, вы можете изменить значения записи, установив поля.

Установка полей только изменяет значения в объекте и временно удерживает их в памяти, пока вы не сохраните объект навсегда в базе данных.

Установка может быть выполнена несколькими способами.

set

Основной способ - через метод set:

$myBox->set('width',10);
$myBox->set('height',4);

set() также принимает третий параметр $vType, который является либо строкой, указывающей формат предоставленного значения, либо вызываемой функцией, которую следует использовать для установки значения поля, переопределяя поведение по умолчанию. Например:

/* Установите дату как целое число метки времени Unix, а не строковую дату */
$myBox->set('birthday',432432543,'integer');

/* Установите размер окна на основе ширины и высоты с помощью пользовательской функции */
function setDim($k,$v,&$obj) {
   $w = $obj->get('width');
   $h = $obj->get('height');
   $dim = $w * $h;
   $obj->set($k,$dim);
}
$myBox->set('dimension','','setDim');

fromArray

Другой способ, которым Объекты могут быть установлены в xPDO через метод fromArray():

$myBox->fromArray(array(
   'width' => 5,
   'height' => 10,
));

xPDOObject::fromArray имеет всего 5 параметров. Мы видели первый в использовании. Вторым является $keyPrefix, который после установки удалит переданное значение из массива, который вы передаете в первом параметре. Хорошим примером этого является передача переменных $_POST в Object:

// Скажем так:
// $_POST = array(
//    'test_w' => 12,
//    'test_h' => 13,
// );
$myBox->fromArray($_POST,'test_');

echo $myBox->get('w'); // prints '12'

Третий параметр, $setPrimaryKeys, является логическим значением, по умолчанию равным false. Когда установлено, это позволит Первичным Ключам в объекте быть установленным. Это полезно для создания новых объектов, для которых вы хотите указать идентификатор:

$myBox = $xpdo->newObject('Box');
$myBox->fromArray(array(
   'id' => 23,
   'width' => 5,
   'height' => 5,
),'',true);

echo $myBox->get('id'); // prints '23'

Четвертый параметр, $rawValues, по умолчанию имеет значение false. Если true, объект установит свои значения без внутреннего вызова set(). Что это значит? Ну, это означает, что проверка типа поля не произойдет; и при этом это поле не будет установлено как «грязное».

Пятый параметр, $adhocValues, при значении true автоматически устанавливает любые переданные значения как переменные объекта, независимо от того, являются ли они полями в объекте. Например:

$myBox->fromArray(array(
  'width' 5',
  'notRealField' => 'boo',
),'',false,false,true);

Последнее поле может быть переопределено путем передачи xPDO::OPT_HYDRATE_ADHOC_FIELDS какtrue в конфигурацию xPDO. Если это значение true, 5-й параметр всегда будет true.

save

Эта функция позволяет вам постоянно сохранять установленные поля в базе данных.

$myBox->save();

Это немедленно выполнит запрос UPDATE (илиCREATE), который сохранит запись в базе данных.

Many objects at once

public function updateCollection($className, array $set, $criteria= null) {

Для пакетных обновлений вы можете использовать xPDO->updateCollection($className, $setValues, $critera).

Параметры:

  • $className: название модели для обновления
  • $setValues: массив с ключами key => value для установки
  • $criteria: экземпляр или массив xPDOCritera, представляющий условие, для которого необходимо обновить коллекции.

Пример:

$modx->updateCollection('modResource', ['published' => true], ['published' => false]);

Количество обновленных строк будет возвращено этим методом.

Будьте осторожны с этим методом, поскольку непредоставление (правильных) критериев может повлиять на множество строк.

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
  • modmore
  • Jens Wittmann – Gestaltung & Entwicklung
  • Raffy
  • eydolan
  • Digital Penguin
  • Fabian Christen
  • Dannevang Digital
  • deJaya
  • Sepia River Studios
  • Following Sea
  • Anton Tarasov
  • Lefthandmedia
  • Nick Clark
  • Chris Fickling
  • Murray Wood
  • YJ
  • CrewMark
  • Richard

Budget

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

Learn more