Views: 2793
Last Modified: 30.03.2022

When not all object fields are completed with data and you need to fill in the missing data, do not use the following approach:

// initially only ID and NAME are available
$author = \Bitrix\Main\Test\Typography\EO_Author::wakeUp(
	['ID' => 17, 'NAME' => 'Name 17']

// we need to write LAST_NAME, retrieving it from database
$row = \Bitrix\Main\Test\Typography\AuthorTable::getByPrimary($author->getId(),
	['select' => ['LAST_NAME']]

// adding value to the object

In this case, the value will be deemed as a newly set, but not an actual value (which, theoretically can lead to unforeseen collisions in further object handling).

The correct way to use the name method for object fill:

// initially only ID and NAME are available
$author = \Bitrix\Main\Test\Typography\EO_Author::wakeUp(
	['ID' => 17, 'NAME' => 'Name 17']

// add LAST_NAME from the database

In addition to name methods, a generic method is available as well. It provides a significantly more options then other generic methods:

$author = \Bitrix\Main\Test\Typography\EO_Author::wakeUp(17);

// filling several fields
$author->fill(['NAME', 'LAST_NAME']);

// filling all presently unfilled fields

// filling fields by mask, for example, all unfilled scalar fields

// unfilled scalar and user fields
	| \Bitrix\Main\ORM\Fields\FieldTypeMask::USERTYPE

 * Masks are available as follows:
 * SCALAR - scalar fields (ORM\ScalarField)
 * EXPRESSION - expressions (ORM\ExpressionField)
 * USERTYPE - user fields
 * REFERENCE - relations 1:1 and N:1 (ORM\Fields\Relations\Reference)
 * ONE_TO_MANY - relations 1:N (ORM\Fields\Relations\OneToMany)
 * MANY_TO_MANY - relations N:M (ORM\Fields\Relations\ManyToMany)
 * FLAT - scalar fields and expressions
 * RELATION - all relations
 * ALL - absolutely all available fields

If you need to additionally fill in several objects, it's strongly not recommended to perform this command in a loop: this will result to a significant number of queries to the database. Handling several objects of the same type requires a similar Collection method.

Courses developed by Bitrix24