Bitrix-D7  20.5.0
Класс Collection
Граф наследования:Collection:

Открытые члены

 __construct (Entity $entity=null)
 Collection constructor. Подробнее...
 
 __clone ()
 
 add (EntityObject $object)
 
 has (EntityObject $object)
 
 hasByPrimary ($primary)
 
 getByPrimary ($primary)
 
 getAll ()
 
 remove (EntityObject $object)
 
 removeByPrimary ($primary)
 
 sysRemove ($srPrimary)
 
 fill ($fields=FieldTypeMask::ALL)
 Fills all the values and relations of object. Подробнее...
 
 save ($ignoreEvents=false)
 
 __get ($name)
 Magic read-only properties. Подробнее...
 
 __set ($name, $value)
 Magic read-only properties. Подробнее...
 
 __call ($name, $arguments)
 Magic to handle getters, setters etc. Подробнее...
 
 sysAddActual (EntityObject $object)
 
 sysOnObjectPrimarySet ($object)
 Callback for object event when it gets primary. Подробнее...
 
 sysIsFilled ()
 
 sysIsChanged ()
 
 sysGetChanges ()
 
 sysResetChanges ($rollback=false)
 
 sysReviseDeletedObjects ()
 
 sysSetFilled ($value=true)
 
 offsetSet ($offset, $value)
 ArrayAccess implementation. Подробнее...
 
 offsetExists ($offset)
 ArrayAccess implementation. Подробнее...
 
 offsetUnset ($offset)
 ArrayAccess implementation. Подробнее...
 
 offsetGet ($offset)
 ArrayAccess implementation. Подробнее...
 
 rewind ()
 Iterator implementation. Подробнее...
 
 current ()
 Iterator implementation. Подробнее...
 
 key ()
 Iterator implementation. Подробнее...
 
 next ()
 Iterator implementation. Подробнее...
 
 valid ()
 Iterator implementation. Подробнее...
 
 count ()
 Countable implementation. Подробнее...
 

Открытые статические члены

static wakeUp ($rows)
 Constructs set of existing objects from pre-selected data, including references and relations. Подробнее...
 

Поля данных

const OBJECT_ADDED = 1
 
const OBJECT_REMOVED = 2
 

Статические открытые данные

static $dataClass
 

Защищенные члены

 sysGetList ($fieldName)
 
 sysGetCollection ($fieldName)
 
 sysNormalizePrimary ($primary)
 
 sysGetPrimaryKey (EntityObject $object)
 
 sysSerializePrimaryKey ($primary)
 

Защищенные данные

 $_entity
 
 $_objectClass
 
 $_objects = []
 
 $_isFilled = false
 
 $_isSinglePrimary
 
 $_objectsChanges
 
 $_objectsRemoved
 
 $_iterableObjects
 

Подробное описание

См. определение в файле main/lib/orm/objectify/collection.php строка 32

Конструктор(ы)

◆ __construct()

__construct ( Entity  $entity = null)
final

Collection constructor.

Аргументы
Entity$entity
Исключения
ArgumentException
SystemException

См. определение в файле main/lib/orm/objectify/collection.php строка 78

79  {
80  if (empty($entity))
81  {
82  if (__CLASS__ !== get_called_class())
83  {
84  // custom collection class
85  $dataClass = static::$dataClass;
86  $this->_entity = $dataClass::getEntity();
87  }
88  else
89  {
90  throw new ArgumentException('Entity required when constructing collection');
91  }
92  }
93  else
94  {
95  $this->_entity = $entity;
96  }
97 
98  $this->_objectClass = $this->_entity->getObjectClass();
99  $this->_isSinglePrimary = count($this->_entity->getPrimaryArray()) == 1;
100  }

Методы

◆ __call()

__call (   $name,
  $arguments 
)

Magic to handle getters, setters etc.

Аргументы
$name
$arguments
Возвращает
array
Исключения
ArgumentException
SystemException

См. определение в файле main/lib/orm/objectify/collection.php строка 538

539  {
540  $first3 = substr($name, 0, 3);
541  $last4 = substr($name, -4);
542 
543  // group getter
544  if ($first3 == 'get' && $last4 == 'List')
545  {
546  $fieldName = EntityObject::sysMethodToFieldCase(substr($name, 3, -4));
547 
548  if ($fieldName == '')
549  {
550  $fieldName = StringHelper::strtoupper($arguments[0]);
551 
552  // check if custom method exists
553  $personalMethodName = $first3.EntityObject::sysFieldToMethodCase($fieldName).$last4;
554 
555  if (method_exists($this, $personalMethodName))
556  {
557  return $this->$personalMethodName(...array_slice($arguments, 1));
558  }
559 
560  // hard field check
561  $this->entity->getField($fieldName);
562  }
563 
564  // check if field exists
565  if ($this->_entity->hasField($fieldName))
566  {
567  return $this->sysGetList($fieldName);
568  }
569  }
570 
571  $last10 = substr($name, -10);
572 
573  if ($first3 == 'get' && $last10 == 'Collection')
574  {
575  $fieldName = EntityObject::sysMethodToFieldCase(substr($name, 3, -10));
576 
577  if ($fieldName == '')
578  {
579  $fieldName = StringHelper::strtoupper($arguments[0]);
580 
581  // check if custom method exists
582  $personalMethodName = $first3.EntityObject::sysFieldToMethodCase($fieldName).$last10;
583 
584  if (method_exists($this, $personalMethodName))
585  {
586  return $this->$personalMethodName(...array_slice($arguments, 1));
587  }
588 
589  // hard field check
590  $this->entity->getField($fieldName);
591  }
592 
593  // check if field exists
594  if ($this->_entity->hasField($fieldName) && $this->_entity->getField($fieldName) instanceof Relation)
595  {
596  return $this->sysGetCollection($fieldName);
597  }
598  }
599 
600  $first4 = substr($name, 0, 4);
601 
602  // filler
603  if ($first4 == 'fill')
604  {
605  $fieldName = EntityObject::sysMethodToFieldCase(substr($name, 4));
606 
607  // check if field exists
608  if ($this->_entity->hasField($fieldName))
609  {
610  return $this->fill([$fieldName]);
611  }
612  }
613 
614  throw new SystemException(sprintf(
615  'Unknown method `%s` for object `%s`', $name, get_called_class()
616  ));
617  }
fill($fields=FieldTypeMask::ALL)
Fills all the values and relations of object.
static strtoupper($str)
Regular uppercase with result cache.

◆ __clone()

__clone ( )

См. определение в файле main/lib/orm/objectify/collection.php строка 102

103  {
104  $this->_objects = \Bitrix\Main\Type\Collection::clone((array)$this->_objects);
105  $this->_objectsRemoved = \Bitrix\Main\Type\Collection::clone((array)$this->_objectsRemoved);
106  $this->_iterableObjects = null;
107  }

◆ __get()

__get (   $name)

Magic read-only properties.

Аргументы
$name
Возвращает
array|Entity
Исключения
SystemException

См. определение в файле main/lib/orm/objectify/collection.php строка 489

490  {
491  switch ($name)
492  {
493  case 'entity':
494  return $this->_entity;
495  case 'dataClass':
496  throw new SystemException('Property `dataClass` should be received as static.');
497  }
498 
499  throw new SystemException(sprintf(
500  'Unknown property `%s` for collection `%s`', $name, get_called_class()
501  ));
502  }

◆ __set()

__set (   $name,
  $value 
)

Magic read-only properties.

Аргументы
$name
$value
Исключения
SystemException

См. определение в файле main/lib/orm/objectify/collection.php строка 512

513  {
514  switch ($name)
515  {
516  case 'entity':
517  case 'dataClass':
518  throw new SystemException(sprintf(
519  'Property `%s` for collection `%s` is read-only', $name, get_called_class()
520  ));
521  }
522 
523  throw new SystemException(sprintf(
524  'Unknown property `%s` for collection `%s`', $name, get_called_class()
525  ));
526  }

◆ add()

add ( EntityObject  $object)
final
Аргументы
EntityObject$object
Исключения
ArgumentException
SystemException

См. определение в файле main/lib/orm/objectify/collection.php строка 115

116  {
117  // check object class
118  if (!($object instanceof $this->_objectClass))
119  {
120  throw new ArgumentException(sprintf(
121  'Invalid object class %s for %s collection, expected "%s".',
122  get_class($object), get_class($this), $this->_objectClass
123  ));
124  }
125 
126  $srPrimary = $this->sysGetPrimaryKey($object);
127 
128  if (!$object->sysHasPrimary())
129  {
130  // object is new and there is no primary yet
131  $object->sysAddOnPrimarySetListener([$this, 'sysOnObjectPrimarySet']);
132  }
133 
134  if (empty($this->_objects[$srPrimary])
135  && (!isset($this->_objectsChanges[$srPrimary]) || $this->_objectsChanges[$srPrimary] != static::OBJECT_REMOVED))
136  {
137  $this->_objects[$srPrimary] = $object;
138  $this->_objectsChanges[$srPrimary] = static::OBJECT_ADDED;
139  }
140  elseif (isset($this->_objectsChanges[$srPrimary]) && $this->_objectsChanges[$srPrimary] == static::OBJECT_REMOVED)
141  {
142  // silent add for removed runtime
143  $this->_objects[$srPrimary] = $object;
144 
145  unset($this->_objectsChanges[$srPrimary]);
146  unset($this->_objectsRemoved[$srPrimary]);
147  }
148  }

◆ count()

count ( )

Countable implementation.

Возвращает
int

См. определение в файле main/lib/orm/objectify/collection.php строка 1015

1016  {
1017  return count($this->_objects);
1018  }

◆ current()

current ( )

Iterator implementation.

Возвращает
EntityObject|mixed

См. определение в файле main/lib/orm/objectify/collection.php строка 972

973  {
974  if ($this->_iterableObjects === null)
975  {
976  $this->_iterableObjects = $this->_objects;
977  }
978 
979  return current($this->_iterableObjects);
980  }

◆ fill()

fill (   $fields = FieldTypeMask::ALL)
final

Fills all the values and relations of object.

Аргументы
int | string[]$fieldsNames of fields to fill
Возвращает
array|Collection
Исключения
ArgumentException
SystemException

См. определение в файле main/lib/orm/objectify/collection.php строка 278

279  {
280  $entityPrimary = $this->_entity->getPrimaryArray();
281 
282  $primaryValues = [];
283  $fieldsToSelect = [];
284 
285  // if field is the only one
286  if (is_scalar($fields) && !is_numeric($fields))
287  {
288  $fields = [$fields];
289  }
290 
291  // collect custom fields to select
292  foreach ($this->_objects as $object)
293  {
294  $idleFields = is_array($fields)
295  ? $object->sysGetIdleFields($fields)
296  : $object->sysGetIdleFieldsByMask($fields);
297 
298  if (!empty($idleFields))
299  {
300  $fieldsToSelect = array_unique(array_merge($fieldsToSelect, $idleFields));
301 
302  // add object to query
303  $objectPrimary = $object->sysRequirePrimary();
304 
305  $primaryValues[] = count($objectPrimary) == 1
306  ? current($objectPrimary)
307  : $objectPrimary;
308  }
309  }
310 
311  // add primary to select
312  if (!empty($fieldsToSelect))
313  {
314  $fieldsToSelect = array_unique(array_merge($entityPrimary, $fieldsToSelect));
315 
316  // build primary filter
317  $primaryFilter = Query::filter();
318 
319  if (count($entityPrimary) == 1)
320  {
321  // IN for single-primary objects
322  $primaryFilter->whereIn($entityPrimary[0], $primaryValues);
323  }
324  else
325  {
326  // OR for multi-primary objects
327  $primaryFilter->logic('or');
328 
329  foreach ($primaryValues as $objectPrimary)
330  {
331  // add each object as a separate condition
332  $oneObjectFilter = Query::filter();
333 
334  foreach ($objectPrimary as $primaryName => $primaryValue)
335  {
336  $oneObjectFilter->where($primaryName, $primaryValue);
337  }
338 
339  $primaryFilter->where($oneObjectFilter);
340  }
341  }
342 
343  // build query
344  $dataClass = $this->_entity->getDataClass();
345  $result = $dataClass::query()->setSelect($fieldsToSelect)->where($primaryFilter)->exec();
346 
347  // set object to identityMap of result, and it will be partially completed by fetch
348  $im = new IdentityMap;
349 
350  foreach ($this->_objects as $object)
351  {
352  $im->put($object);
353  }
354 
355  $result->setIdentityMap($im);
356  $result->fetchCollection();
357  }
358 
359  // return field value it it was only one
360  if (is_array($fields) && count($fields) == 1 && $this->entity->hasField(current($fields)))
361  {
362  $fieldName = current($fields);
363  $field = $this->entity->getField($fieldName);
364 
365  return ($field instanceof Relation)
366  ? $this->sysGetCollection($fieldName)
367  : $this->sysGetList($fieldName);
368  }
369  }
static filter()
Returns new instance of Filter.

◆ getAll()

getAll ( )
final
Возвращает
EntityObject[]

См. определение в файле main/lib/orm/objectify/collection.php строка 198

199  {
200  return array_values($this->_objects);
201  }

◆ getByPrimary()

getByPrimary (   $primary)
final
Аргументы
$primary
Возвращает
EntityObject
Исключения
ArgumentException

См. определение в файле main/lib/orm/objectify/collection.php строка 189

190  {
191  $normalizedPrimary = $this->sysNormalizePrimary($primary);
192  return $this->_objects[$this->sysSerializePrimaryKey($normalizedPrimary)];
193  }

◆ has()

has ( EntityObject  $object)
final
Аргументы
EntityObject$object
Возвращает
bool
Исключения
ArgumentException
SystemException

См. определение в файле main/lib/orm/objectify/collection.php строка 157

158  {
159  // check object class
160  if (!($object instanceof $this->_objectClass))
161  {
162  throw new ArgumentException(sprintf(
163  'Invalid object class %s for %s collection, expected "%s".',
164  get_class($object), get_class($this), $this->_objectClass
165  ));
166  }
167 
168  return array_key_exists($this->sysGetPrimaryKey($object), $this->_objects);
169  }

◆ hasByPrimary()

hasByPrimary (   $primary)
final
Аргументы
$primary
Возвращает
bool
Исключения
ArgumentException

См. определение в файле main/lib/orm/objectify/collection.php строка 177

178  {
179  $normalizedPrimary = $this->sysNormalizePrimary($primary);
180  return array_key_exists($this->sysSerializePrimaryKey($normalizedPrimary), $this->_objects);
181  }

◆ key()

key ( )

Iterator implementation.

Возвращает
int|mixed|null|string

См. определение в файле main/lib/orm/objectify/collection.php строка 987

988  {
989  return key($this->_iterableObjects);
990  }

◆ next()

next ( )

Iterator implementation.

См. определение в файле main/lib/orm/objectify/collection.php строка 995

996  {
997  next($this->_iterableObjects);
998  }

◆ offsetExists()

offsetExists (   $offset)

ArrayAccess implementation.

Аргументы
mixed$offset
Возвращает
bool|void
Исключения
NotImplementedException

См. определение в файле main/lib/orm/objectify/collection.php строка 928

929  {
930  throw new NotImplementedException;
931  }

◆ offsetGet()

offsetGet (   $offset)

ArrayAccess implementation.

Аргументы
mixed$offset
Возвращает
mixed|void
Исключения
NotImplementedException

См. определение в файле main/lib/orm/objectify/collection.php строка 953

954  {
955  throw new NotImplementedException;
956  }

◆ offsetSet()

offsetSet (   $offset,
  $value 
)

ArrayAccess implementation.

Аргументы
mixed$offset
mixed$value
Исключения
ArgumentException
SystemException

См. определение в файле main/lib/orm/objectify/collection.php строка 915

916  {
917  $this->add($value);
918  }

◆ offsetUnset()

offsetUnset (   $offset)

ArrayAccess implementation.

Аргументы
mixed$offset
Исключения
NotImplementedException

См. определение в файле main/lib/orm/objectify/collection.php строка 940

941  {
942  throw new NotImplementedException;
943  }

◆ remove()

remove ( EntityObject  $object)
final
Аргументы
EntityObject$object
Возвращает
void
Исключения
ArgumentException
SystemException

См. определение в файле main/lib/orm/objectify/collection.php строка 210

211  {
212  // check object class
213  if (!($object instanceof $this->_objectClass))
214  {
215  throw new ArgumentException(sprintf(
216  'Invalid object class %s for %s collection, expected "%s".',
217  get_class($object), get_class($this), $this->_objectClass
218  ));
219  }
220 
221  // ignore deleted objects
222  if ($object->state === State::DELETED)
223  {
224  return;
225  }
226 
227  $srPrimary = $this->sysGetPrimaryKey($object);
228  $this->sysRemove($srPrimary);
229  }

◆ removeByPrimary()

removeByPrimary (   $primary)
final
Аргументы
$primary
Исключения
ArgumentException

См. определение в файле main/lib/orm/objectify/collection.php строка 236

237  {
238  $normalizedPrimary = $this->sysNormalizePrimary($primary);
239  $srPrimary = $this->sysSerializePrimaryKey($normalizedPrimary);
240 
241  $this->sysRemove($srPrimary);
242  }

◆ rewind()

rewind ( )

Iterator implementation.

См. определение в файле main/lib/orm/objectify/collection.php строка 961

962  {
963  $this->_iterableObjects = $this->_objects;
964  reset($this->_iterableObjects);
965  }

◆ save()

save (   $ignoreEvents = false)
final

См. определение в файле main/lib/orm/objectify/collection.php строка 371

372  {
373  $result = new Result;
374 
375  /** @var EntityObject[] $addObjects */
376  $addObjects = [];
377 
378  /** @var EntityObject[] $updateObjects */
379  $updateObjects = [];
380 
381  foreach ($this->_objects as $object)
382  {
383  if ($object->sysGetState() === State::RAW)
384  {
385  $addObjects[] = ['__object' => $object];
386  }
387  elseif ($object->sysGetState() === State::CHANGED)
388  {
389  $updateObjects[] = $object;
390  }
391  }
392 
393  $dataClass = static::$dataClass;
394 
395  // multi add
396  if (!empty($addObjects))
397  {
398  $result = $dataClass::addMulti($addObjects, $ignoreEvents);
399  }
400 
401  // multi update
402  if (!empty($updateObjects))
403  {
404  $areEqual = true;
405  $primaries = [];
406 
407  $dataSample = $updateObjects[0]->collectValues(Values::CURRENT, FieldTypeMask::SCALAR | FieldTypeMask::USERTYPE);
408  asort($dataSample);
409 
410  // get only scalar & uf data and check its uniqueness
411  foreach ($updateObjects as $object)
412  {
413  $objectData = $object->collectValues(Values::CURRENT, FieldTypeMask::SCALAR | FieldTypeMask::USERTYPE);
414  asort($objectData);
415 
416  if ($dataSample !== $objectData)
417  {
418  $areEqual = false;
419  break;
420  }
421 
422  $primaries[] = $object->primary;
423  }
424 
425  if ($areEqual)
426  {
427  // one query
428  $result = $dataClass::updateMulti($primaries, $dataSample, $ignoreEvents);
429 
430  // post save
431  foreach ($updateObjects as $object)
432  {
433  $object->sysSaveRelations($result);
434  $object->sysPostSave();
435  }
436  }
437  else
438  {
439  // each object separately
440  foreach ($updateObjects as $object)
441  {
442  $objectResult = $object->save();
443 
444  if (!$objectResult->isSuccess())
445  {
446  $result->addErrors($objectResult->getErrors());
447  }
448  }
449  }
450  }
451 
452  return $result;
453  }

◆ sysAddActual()

sysAddActual ( EntityObject  $object)

См. определение в файле main/lib/orm/objectify/collection.php строка 627

628  {
629  $this->_objects[$this->sysGetPrimaryKey($object)] = $object;
630  }

◆ sysGetChanges()

sysGetChanges ( )

См. определение в файле main/lib/orm/objectify/collection.php строка 690

691  {
692  $changes = [];
693 
694  foreach ($this->_objectsChanges as $srPrimary => $changeCode)
695  {
696  if (isset($this->_objects[$srPrimary]))
697  {
698  $changedObject = $this->_objects[$srPrimary];
699  }
700  elseif (isset($this->_objectsRemoved[$srPrimary]))
701  {
702  $changedObject = $this->_objectsRemoved[$srPrimary];
703  }
704  else
705  {
706  $changedObject = null;
707  }
708 
709  if (empty($changedObject))
710  {
711  throw new SystemException(sprintf(
712  'Object with primary `%s` was not found in `%s` collection', $srPrimary, get_class($this)
713  ));
714  }
715 
716  $changes[] = [$changedObject, $changeCode];
717  }
718 
719  return $changes;
720  }

◆ sysGetCollection()

sysGetCollection (   $fieldName)
protected
Аргументы
$fieldName
Возвращает
Collection
Исключения
ArgumentException
SystemException

См. определение в файле main/lib/orm/objectify/collection.php строка 774

775  {
776  /** @var Relation $field */
777  $field = $this->_entity->getField($fieldName);
778 
779  /** @var Collection $values */
780  $values = $field->getRefEntity()->createCollection();
781 
782  // collect field values
783  foreach ($this->_objects as $objectPrimary => $object)
784  {
785  $value = $object->sysGetValue($fieldName);
786 
787  if ($value instanceof EntityObject)
788  {
789  $values[] = $value;
790  }
791  elseif ($value instanceof Collection)
792  {
793  foreach ($value->getAll() as $remoteObject)
794  {
795  $values[] = $remoteObject;
796  }
797  }
798  }
799 
800  return $values;
801  }

◆ sysGetList()

sysGetList (   $fieldName)
protected
Аргументы
$fieldName
Возвращает
array
Исключения
SystemException

См. определение в файле main/lib/orm/objectify/collection.php строка 754

755  {
756  $values = [];
757 
758  // collect field values
759  foreach ($this->_objects as $objectPrimary => $object)
760  {
761  $values[] = $object->sysGetValue($fieldName);
762  }
763 
764  return $values;
765  }

◆ sysGetPrimaryKey()

sysGetPrimaryKey ( EntityObject  $object)
protected

См. определение в файле main/lib/orm/objectify/collection.php строка 876

877  {
878  if ($object->sysHasPrimary())
879  {
880  return $this->sysSerializePrimaryKey($object->primary);
881  }
882  else
883  {
884  return spl_object_hash($object);
885  }
886  }

◆ sysIsChanged()

sysIsChanged ( )

См. определение в файле main/lib/orm/objectify/collection.php строка 679

680  {
681  return !empty($this->_objectsChanges);
682  }

◆ sysIsFilled()

sysIsFilled ( )

См. определение в файле main/lib/orm/objectify/collection.php строка 669

◆ sysNormalizePrimary()

sysNormalizePrimary (   $primary)
protected

См. определение в файле main/lib/orm/objectify/collection.php строка 836

837  {
838  // normalize primary
839  $primaryNames = $this->_entity->getPrimaryArray();
840 
841  if (!is_array($primary))
842  {
843  if (count($primaryNames) > 1)
844  {
845  throw new ArgumentException(sprintf(
846  'Only one value of primary found, when entity %s has %s primary keys',
847  $this->_entity->getDataClass(), count($primaryNames)
848  ));
849  }
850 
851  $primary = [$primaryNames[0] => $primary];
852  }
853 
854  // check in $this->objects
855  $normalizedPrimary = [];
856 
857  foreach ($primaryNames as $primaryName)
858  {
859  /** @var ScalarField $field */
860  $field = $this->_entity->getField($primaryName);
861  $normalizedPrimary[$primaryName] = $field->cast($primary[$primaryName]);
862  }
863 
864  return $normalizedPrimary;
865  }

◆ sysOnObjectPrimarySet()

sysOnObjectPrimarySet (   $object)

Callback for object event when it gets primary.

Аргументы
$object

См. определение в файле main/lib/orm/objectify/collection.php строка 637

638  {
639  $srHash = spl_object_hash($object);
640  $srPrimary = $this->sysSerializePrimaryKey($object->primary);
641 
642  if (isset($this->_objects[$srHash]))
643  {
644  // rewrite object
645  unset($this->_objects[$srHash]);
646  $this->_objects[$srPrimary] = $object;
647 
648  // rewrite changes
649  if (isset($this->_objectsChanges[$srHash]))
650  {
651  $this->_objectsChanges[$srPrimary] = $this->_objectsChanges[$srHash];
652  unset($this->_objectsChanges[$srHash]);
653  }
654 
655  // rewrite removed registry
656  if (isset($this->_objectsRemoved[$srHash]))
657  {
658  $this->_objectsRemoved[$srPrimary] = $this->_objectsRemoved[$srHash];
659  unset($this->_objectsRemoved[$srHash]);
660  }
661  }
662  }

◆ sysRemove()

sysRemove (   $srPrimary)

См. определение в файле main/lib/orm/objectify/collection.php строка 244

245  {
246  $object = $this->_objects[$srPrimary];
247 
248  if (empty($object))
249  {
250  $object = $this->entity->wakeUpObject($srPrimary);
251  }
252 
253  unset($this->_objects[$srPrimary]);
254 
255  if (!isset($this->_objectsChanges[$srPrimary]) || $this->_objectsChanges[$srPrimary] != static::OBJECT_ADDED)
256  {
257  // regular remove
258  $this->_objectsChanges[$srPrimary] = static::OBJECT_REMOVED;
259  $this->_objectsRemoved[$srPrimary] = $object;
260  }
261  elseif (isset($this->_objectsChanges[$srPrimary]) && $this->_objectsChanges[$srPrimary] == static::OBJECT_ADDED)
262  {
263  // silent remove for added runtime
264  unset($this->_objectsChanges[$srPrimary]);
265  unset($this->_objectsRemoved[$srPrimary]);
266  }
267  }

◆ sysResetChanges()

sysResetChanges (   $rollback = false)

См. определение в файле main/lib/orm/objectify/collection.php строка 727

728  {
729  if ($rollback)
730  {
731  foreach ($this->_objectsChanges as $srPrimary => $changeCode)
732  {
733  if ($changeCode === static::OBJECT_ADDED)
734  {
735  unset($this->_objects[$srPrimary]);
736  }
737  elseif ($changeCode === static::OBJECT_REMOVED)
738  {
739  $this->_objects[$srPrimary] = $this->_objectsRemoved[$srPrimary];
740  }
741  }
742  }
743 
744  $this->_objectsChanges = [];
745  $this->_objectsRemoved = [];
746  }

◆ sysReviseDeletedObjects()

sysReviseDeletedObjects ( )

См. определение в файле main/lib/orm/objectify/collection.php строка 806

807  {
808  // clear from deleted objects
809  foreach ($this->_objects as $k => $object)
810  {
811  if ($object->state === State::DELETED)
812  {
813  unset($this->_objects[$k]);
814  }
815  }
816  }

◆ sysSerializePrimaryKey()

sysSerializePrimaryKey (   $primary)
protected

См. определение в файле main/lib/orm/objectify/collection.php строка 896

897  {
898  if ($this->_isSinglePrimary)
899  {
900  return current($primary);
901  }
902 
903  return Json::encode(array_values($primary));
904  }
static encode($data, $options=null)
Returns a string containing the JSON representation of $data.
Definition: web/json.php:22

◆ sysSetFilled()

sysSetFilled (   $value = true)

См. определение в файле main/lib/orm/objectify/collection.php строка 823

824  {
825  $this->_isFilled = $value;
826  }

◆ valid()

valid ( )

Iterator implementation.

Возвращает
bool

См. определение в файле main/lib/orm/objectify/collection.php строка 1005

1006  {
1007  return key($this->_iterableObjects) !== null;
1008  }

◆ wakeUp()

static wakeUp (   $rows)
staticfinal

Constructs set of existing objects from pre-selected data, including references and relations.

Аргументы
$rows
Возвращает
array|static
Исключения
ArgumentException
SystemException

См. определение в файле main/lib/orm/objectify/collection.php строка 464

465  {
466  // define object class
467  $dataClass = static::$dataClass;
468  $objectClass = $dataClass::getObjectClass();
469 
470  // complete collection
471  $collection = new static;
472 
473  foreach ($rows as $row)
474  {
475  $collection->sysAddActual($objectClass::wakeUp($row));
476  }
477 
478  return $collection;
479  }

Поля

◆ $_entity

$_entity
protected

См. определение в файле main/lib/orm/objectify/collection.php строка 41

◆ $_isFilled

$_isFilled = false
protected

См. определение в файле main/lib/orm/objectify/collection.php строка 50

◆ $_isSinglePrimary

$_isSinglePrimary
protected

См. определение в файле main/lib/orm/objectify/collection.php строка 53

◆ $_iterableObjects

$_iterableObjects
protected

См. определение в файле main/lib/orm/objectify/collection.php строка 62

◆ $_objectClass

$_objectClass
protected

См. определение в файле main/lib/orm/objectify/collection.php строка 44

◆ $_objects

$_objects = []
protected

См. определение в файле main/lib/orm/objectify/collection.php строка 47

◆ $_objectsChanges

$_objectsChanges
protected

См. определение в файле main/lib/orm/objectify/collection.php строка 56

◆ $_objectsRemoved

$_objectsRemoved
protected

См. определение в файле main/lib/orm/objectify/collection.php строка 59

◆ $dataClass

$dataClass
static

См. определение в файле main/lib/orm/objectify/collection.php строка 38

◆ OBJECT_ADDED

const OBJECT_ADDED = 1

См. определение в файле main/lib/orm/objectify/collection.php строка 65

◆ OBJECT_REMOVED

const OBJECT_REMOVED = 2

См. определение в файле main/lib/orm/objectify/collection.php строка 68


Объявления и описания членов класса находятся в файле: