Spot\Relation\HasMany::save PHP Метод

save() публичный Метод

Save related entities
public save ( Spot\EntityInterface $entity, string $relationName, array $options = [] ) : boolean
$entity Spot\EntityInterface Entity to save relation from
$relationName string Name of the relation to save
$options array Options to pass to the mappers
Результат boolean
    public function save(EntityInterface $entity, $relationName, $options = [])
    {
        $relatedEntities = $entity->relation($relationName);
        $deletedIds = [];
        $lastResult = false;
        $relatedMapper = $this->mapper()->getMapper($this->entityName());
        if (is_array($relatedEntities) || $relatedEntities instanceof Entity\Collection) {
            $oldEntities = $this->execute();
            $relatedIds = [];
            foreach ($relatedEntities as $related) {
                if ($related->isNew() || $related->isModified() || $related->get($this->foreignKey()) !== $entity->primaryKey()) {
                    //Update the foreign key to match the main entity primary key
                    $related->set($this->foreignKey(), $entity->primaryKey());
                    $lastResult = $relatedMapper->save($related, $options);
                }
                $relatedIds[] = $related->id;
            }
            foreach ($oldEntities as $oldRelatedEntity) {
                if (!in_array($oldRelatedEntity, $relatedIds)) {
                    $deletedIds[] = $oldRelatedEntity->primaryKey();
                }
            }
        }
        if (count($deletedIds) || $relatedEntities === false) {
            $conditions = [$this->foreignKey() => $entity->primaryKey()];
            if (count($deletedIds)) {
                $conditions[$this->localKey() . ' :in'] = $deletedIds;
            }
            if ($relatedMapper->entityManager()->fields()[$this->foreignKey()]['notnull']) {
                $relatedMapper->delete($conditions);
            } else {
                $relatedMapper->queryBuilder()->builder()->update($relatedMapper->table())->set($this->foreignKey(), null)->where($conditions);
            }
        }
        return $lastResult;
    }