Выборка в "классном" процессоре
Василий, форкнул твой miniPayment, и затачиваю под свои нужды, а заодно разбираюсь с процессорами.
Из всех примочек что налепил, пока не получилась одна — задумка была в том, чтобы дополнить miniPayment кастомными полями, т.к у разных платежных агрегаторов могут быть разные поля,
так вот, суть задачи:
1.В табличку modx_minipayment_operation добавилось новое поле, пусть это будет txnid int(11)
2.Проапдейтил схему, в итоге поле забиндилось в model.
Цель-заставить процессор miniPaymentItemUpdateProcessor (mgr/operation/update.class.php) брать объект не по ID а по TXNID.
Что я только не делал, но всеравно объект берется по полю ID, быть может от того, что ID в таблице это PK?
В вызове процессора, например я пробовал менять
Здесь я так понимаю нужно как-то в объекте переопределить параметры селекта для выбора, прошу помощи, Т.к метод пока не привел к результату…
Из всех примочек что налепил, пока не получилась одна — задумка была в том, чтобы дополнить 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));
но это так же не повлияло на результат…Здесь я так понимаю нужно как-то в объекте переопределить параметры селекта для выбора, прошу помощи, Т.к метод пока не привел к результату…
Комментарии: 5
У modObjectProcessor, кажется, есть свойство $primaryKey = 'id'.
Нужно его переопределить в твоем процессоре.
Ну или просто переопредели метод initialize() — именно он достает нужный объект по id.
Нужно его переопределить в твоем процессоре.
Ну или просто переопредели метод initialize() — именно он достает нужный объект по id.
1 способ не удался=)
попробовал передать в процессор
попробовал передать в процессор
$response = $this->runProcessor('mgr/operation/update', array('txnid' => $id, 'status' => $status));
ну и в процессореpublic $primaryKeyField='txnid';
не помогло, щас в инициализации перепишу, думаю это самое логичное, судя по всему +)
Кстати все получилось, довольно просто, и я более менее разобрался в работе процессора.
Для того чтоб взять произвольный объект нужно просто переопределить его на стадии инициализации.
Для того чтоб взять произвольный объект нужно просто переопределить его на стадии инициализации.
//переинициализируем получение объета,для записи по 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;
}
Верно, переопределение $primaryKeyField не прокатило, так как у тебя txnid не первичный ключ таблицы.
Что то я не сообразил =)
Что то я не сообразил =)
=)))Вообще эти ОРМ блин, хороши конечно… Но не привычно…
Я больше доверяю практике и опыту например в своих EE проектах на работе, поэтому в связке Java с Oracle общение идет на PL/SQL, без всяких посреднеческих ОРМ… Конечно есть и минусы, вроде возможных XSS, но гибкость на высоте, как и скорость работы… Тяжело переучить себя =)
Я больше доверяю практике и опыту например в своих EE проектах на работе, поэтому в связке Java с Oracle общение идет на PL/SQL, без всяких посреднеческих ОРМ… Конечно есть и минусы, вроде возможных XSS, но гибкость на высоте, как и скорость работы… Тяжело переучить себя =)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.