Выборка в "классном" процессоре

Василий, форкнул твой miniPayment, и затачиваю под свои нужды, а заодно разбираюсь с процессорами.
Из всех примочек что налепил, пока не получилась одна — задумка была в том, чтобы дополнить miniPayment кастомными полями, т.к у разных платежных агрегаторов могут быть разные поля,
так вот, суть задачи:
1.В табличку modx_minipayment_operation добавилось новое поле, пусть это будет txnid int(11)
2.Проапдейтил схему, в итоге поле забиндилось в model.

Цель-заставить процессор miniPaymentItemUpdateProcessor (mgr/operation/update.class.php) брать объект не по ID а по TXNID.

Что я только не делал, но всеравно объект берется по полю ID, быть может от того, что ID в таблице это PK?
В вызове процессора, например я пробовал менять

$response = $this->runProcessor('mgr/operation/update', array('id' => $id, 'status' => $status));
в параметре массива с передачай данных на
$response = $this->runProcessor('mgr/operation/update', array('txnid' => $id, 'status' => $status));
но это так же не повлияло на результат…

Здесь я так понимаю нужно как-то в объекте переопределить параметры селекта для выбора, прошу помощи, Т.к метод пока не привел к результату…
Clean
19 мая 2013, 08:56
modx.pro
962
0

Комментарии: 5

Василий Наумкин
19 мая 2013, 13:05
0
У modObjectProcessor, кажется, есть свойство $primaryKey = 'id'.
Нужно его переопределить в твоем процессоре.

Ну или просто переопредели метод initialize() — именно он достает нужный объект по id.
    Clean
    19 мая 2013, 13:24
    0
    1 способ не удался=)
    попробовал передать в процессор
    $response = $this->runProcessor('mgr/operation/update', array('txnid' => $id, 'status' => $status));
    ну и в процессоре
    public $primaryKeyField='txnid';
    не помогло, щас в инициализации перепишу, думаю это самое логичное, судя по всему +)
    Clean
    19 мая 2013, 18:20
    0
    Кстати все получилось, довольно просто, и я более менее разобрался в работе процессора.
    Для того чтоб взять произвольный объект нужно просто переопределить его на стадии инициализации.

    //переинициализируем получение объета,для записи по ID полученной транзакции
        
        /**
         * {@inheritDoc}
         * @return boolean
         */
        public function initialize() {
            $txn = $this->getProperty('txnid');
            $this->object = $this->modx->getObject($this->classKey, array('txnid' => $txn));
            if (empty($this->object))
            {
                return $this->modx->lexicon('access_denied');
            }
    
            return true;
        }
      Василий Наумкин
      19 мая 2013, 19:38
      0
      Верно, переопределение $primaryKeyField не прокатило, так как у тебя txnid не первичный ключ таблицы.
      Что то я не сообразил =)
        Clean
        19 мая 2013, 21:01
        0
        =)))Вообще эти ОРМ блин, хороши конечно… Но не привычно…
        Я больше доверяю практике и опыту например в своих EE проектах на работе, поэтому в связке Java с Oracle общение идет на PL/SQL, без всяких посреднеческих ОРМ… Конечно есть и минусы, вроде возможных XSS, но гибкость на высоте, как и скорость работы… Тяжело переучить себя =)
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5