правильный способ загрузки сопоставления массивов хешей mongodb, если не использовать аннотации со странными аксессуарами

Я делаю это, чтобы сопоставить отображение аннотаций моего документа. Но это не догоняет. Я знаю, что это старый код, но кто-то знает, как правильно его отображать. Благодаря!

связанный PR = https://github.com/Payum/PaypalExpressCheckoutNvp/pull/12/files#diff-fcfa75e424ccb89d62449aba21f9db31R49

А также связано с этим: https://groups.google.com/forum/#!topic/doctrine-user/MdIoOMWA7F4 https://github.com/doctrine/mongodb-odm/issues/421 https: // github. ком / доктрина / MongoDB-ODM / вопросы / 453

<?php abstract class MongoTest extends BaseMongoTest { /** * {@inheritDoc} */ protected function getMetadataDriverImpl() { $rootDir = realpath(__DIR__.'/../../../../../../../../../'); if (false === $rootDir || false === is_dir($rootDir.'/src/Payum')) { throw new \RuntimeException('Cannot guess Payum root dir.'); } $driver = new MappingDriverChain; $xmlDriver = new XmlDriver( new SymfonyFileLocator( array( $rootDir.'/src/Payum/Paypal/ExpressCheckout/Nvp/Bridge/Doctrine/Resources/mapping' => 'Payum\Paypal\ExpressCheckout\Nvp\Bridge\Doctrine\Document', $rootDir.'/examples/Payum/Paypal/ExpressCheckout/Nvp/Examples/Resources/mapping' => 'Payum\Paypal\ExpressCheckout\Nvp\Examples\Document' ), '.mongodb.xml' ), '.mongodb.xml' ); $driver->addDriver($xmlDriver, 'Payum\Paypal\ExpressCheckout\Nvp\Examples\Document'); $driver->addDriver($xmlDriver, 'Payum\Paypal\ExpressCheckout\Nvp\Bridge\Doctrine\Document'); return $driver; } 

Я получаю ошибки в 2 тестах из-за отсутствия свойств свойств документа PaymentDetail в папке примеров.

Вот отображение PaymentDetails

https://github.com/cordoval/PaypalExpressCheckoutNvp/blob/mongo-tests/src/Payum/Paypal/ExpressCheckout/Nvp/Bridge/Doctrine/Resources/mapping/PaymentDetails.mongodb.xml?pr=%2FPayum%2FPaypalExpressCheckoutNvp%2Fpull % 2F12

и отображение для суперкласса

https://github.com/cordoval/PaypalExpressCheckoutNvp/blob/mongo-tests/examples/Payum/Paypal/ExpressCheckout/Nvp/Examples/Resources/mapping/PaymentDetails.mongodb.xml?pr=%2FPayum%2FPaypalExpressCheckoutNvp%2Fpull%2F12

Похоже, проблема связана с странным сетевым / getter BaseModel, который расширен PayDetails.

 protected $paymentrequest_nnn_amt = array(); public function getPaymentrequestAmt($n = null) { return $this->get('paymentrequest_nnn_amt', $n); } public function setPaymentrequestAmt($n, $value) { $this->set('paymentrequest_nnn_amt', $value, $n); } 

что выше относится к промежуточному базовому классу, а вот ниже из базового класса

 /** * @param string $property * @param bool $n * @param bool $m * * @return mixed */ protected function get($property, $n = false, $m = false) { $currentValue = $this->$property; if (false !== $n && false !== $m) { if (null === $n && null === $m) { return $currentValue; } if (array_key_exists($n, $currentValue) && array_key_exists($m,$currentValue[$n]){ return $currentValue[$n][$m]; } } if (null === $n) { return $currentValue; } if (array_key_exists($n, $currentValue)) { return $currentValue[$n]; } } 

Я узнал и исправил проблему. Было несколько проблем, с которыми я столкнулся:

  • Во-первых, после долгого использования ORM меня смутило, что name – это поле в монго, а fieldName – имя свойства ( проблема ).
  • Во-вторых, если fieldName не соответствует никакому свойству, он просто пропускается (где ORM выдает исключение). Поэтому было трудно выяснить, почему имущество не сохраняется. ( выпуск ).

После фиксации отображения все работает нормально.