Клево. Переделал код так: <?php class OperationCre

Jun 29, 2015

Клево. Переделал код так:

class OperationCreateProcessor extends modObjectCreateProcessor {
    
    /* 
     * Процессор создает "Операции" для управления финансами
     * Операция - это расход, приход или перевод со счета на счет
     */
     
    public $classKey = 'Operation';
    public $objectType = 'object';
    
    public function beforeSet() {
        $amount = $this->getProperty('amount');
        switch ($this->getProperty('type')) {
            case 'charge':
                $this->setProperty('amount', -1 * $amount);
                break;
            case 'income': 
                $this->setProperty('amount', 1 * $amount);
                break;
            case 'transfer':
                $this->object->Related = $this->modx->newObject('Operation');
                $this->object->Related->fromArray($this->getProperties());
                $this->object->Related->set('amount', 1 * $amount);
                $this->object->Related->set('account', $this->getProperty('to'));
                $this->object->Related->set('relation_type', $this->getProperty('type'));

                $this->setProperty('amount', -1 * $amount);
                $this->setProperty('account', $this->getProperty('from'));
                $this->setProperty('related', $secondOp->id);
                $this->setProperty('relation_type', $this->getProperty('type'));
                break;
            default:
                $this->modx->error->addField('type', 'Unknown type');
                return false;
        }
        return true;
    }
    
    public function afterSave() {
        if ($this->getProperty('type') == 'transfer') {
            if ($this->object->Related) {
                $this->object->Related->set('related', $this->object->id);
                $this->object->Related->save();
            }
        }
        
        return true;
    }

}

return 'OperationCreateProcessor';

И вот здесь опять вопрос. Вот есть строка, где связанные объекты сохраняются второй раз и в них передаются ключи основного объекта для сохранения связи. Однако у меня без блока afterSave у связанного объекта поле related оказывается незаполненным.

Вот описание связи:

// ...
    'Related' => 
    array (
      'class' => 'Operation',
      'local' => 'related',
      'foreign' => 'id',
      'cardinality' => 'one',
      'owner' => 'foreign',
    ),
// ...

По идее должно работать. Но почему-то не хочет…