Клево. Переделал код так:
<?php 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', ), // ...
По идее должно работать. Но почему-то не хочет…