patchEntity() public method

When merging HasMany or BelongsToMany associations, all the entities in the $data array will appear, those that can be matched by primary key will get the data merged, but those that cannot, will be discarded. You can limit fields that will be present in the merged entity by passing the fieldList option, which is also accepted for associations: $article = $this->Articles->patchEntity($article, $this->request->data(), [ 'fieldList' => ['title', 'body', 'tags', 'comments'], 'associated' => ['Tags', 'Comments.Users' => ['fieldList' => 'username']] ] ); By default, the data is validated before being passed to the entity. In the case of invalid fields, those will not be assigned to the entity. The validate option can be used to disable validation on the passed data: $article = $this->patchEntity($article, $this->request->data(),[ 'validate' => false ]); You can use the Model.beforeMarshal event to modify request data before it is converted into entities.
public patchEntity ( Cake\Datasource\EntityInterface $entity, array $data, array $options = [] )
$entity Cake\Datasource\EntityInterface
$data array
$options array
 /**
  * Helper generator for use with importTable().
  *
  * Yields a single new Entity instance approciate for $Table for each
  * of $records where the values are merged with $defaults.
  *
  * Will skip any records that fail to validate, dumping validation
  * errors to the console in the process.
  *
  * Used by imporTables().
  *
  * @param Cake\ORM\Table $Table A Table instance to save records into.
  * @param array $records An array of Entity records to save into the Table.
  * @param array $defaults Optional array of default field values to merge into each record.
  * @param array $options Optional array of newEntity() options to use.
  * @return void
  */
 public function entityGenerator(Table $Table, array $records, array $defaults = [], array $options = [])
 {
     $defaultOptions = ['validate' => true, 'accessibleFields' => ['*' => true]];
     $options = $options + $defaultOptions;
     $keyField = $Table->primaryKey();
     foreach ($records as $r) {
         $r = Hash::merge($defaults, $r);
         $id = !empty($r[$keyField]) ? $r[$keyField] : false;
         if ($id) {
             $entity = $Table->find()->where([$keyField => $id])->first();
             if ($entity) {
                 $entity = $Table->patchEntity($entity, $r, $options);
                 if (!$entity->dirty()) {
                     $this->verbose("<success>{$Table->alias()} ({$id}): No changes.</success>");
                     continue;
                 }
             } else {
                 $entity = $Table->newEntity($r, $options);
                 $entity->isNew(true);
             }
         } else {
             $entity = $Table->newEntity($r, $options);
         }
         $errors = $entity->errors();
         if ($errors) {
             $this->printValidationErrors($Table->alias(), $id, $errors);
             continue;
         }
         (yield $entity);
     }
 }
 /**
  * {@inheritDoc}
  */
 public function patchEntity(EntityInterface $type, array $data, array $options = [])
 {
     $return = parent::patchEntity($type, $data);
     if (!empty($data['permissions'])) {
         $roles = [];
         foreach ($data['permissions'] as $rule => $ids) {
             foreach ($ids as $roleId) {
                 if (!empty($roleId)) {
                     $role = $this->Roles->get($roleId);
                     $role->set('_joinData', $this->ContentTypePermissions->newEntity(['action' => $rule]));
                     $roles[] = $role;
                 }
             }
         }
         $return->set('permissions', $roles);
     }
     return $return;
 }
 /**
  * Let the logged in user change his password.
  *
  * @param array $options
  * @return void
  */
 public function changePassword($options = [])
 {
     $options = Hash::merge($this->_defaultConfig['changePassword'], $options);
     $entity = $this->UserTable->newEntity();
     $entity->accessible(['id', 'old_password', 'new_password', 'confirm_password'], true);
     if ($this->request->is(['post', 'put'])) {
         $entity = $this->UserTable->patchEntity($entity, $this->request->data);
         $entity->id = $this->_controller->Auth->user('id');
         $entity->isNew(false);
         if ($this->UserTable->changePassword($entity)) {
             $this->request->data = [];
             $entity = $this->UserTable->newEntity();
             $entity->id = $this->_controller->Auth->user('id');
             $entity->isNew(false);
             $this->handleFlashAndRedirect('success', $options);
         } else {
             $this->handleFlashAndRedirect('error', $options);
         }
     }
     $this->_controller->set('entity', $entity);
 }