2013-04-19 12 views
7

preUpdate सोनाटा व्यवस्थापक में पुराने डेटा प्राप्त मैं एक product इकाई है और यह एक images क्षेत्र है कि स्टोर उत्पाद से छवियों नामों लेकिन छवियों के नाम एक part_number क्षेत्र है कि अद्वितीय है की निर्भर करता है, तो उपयोगकर्ता एक गलती करते हैं, तो भाग संख्या में और इसके बाद इसे संपादित करने मैं भी छवियों नामबंडल

मैं इस कोशिश की बदलना होगा चाहता है, लेकिन यह नहीं काम करता है:

// class ProductsAdmin extends Admin 

public function preUpdate($product) { 

    $old_product = $this->getSubject(); 

    if ($old_product->getPartNumber() != $product->getPartNumber) 
    { 
     // change file names 
    } 

    $this->saveFile($product); 
} 

मैं कैसे preUpdate में मूल पंक्ति मिल() फ़ंक्शन ?

उत्तर

13

विषय आधिकारिक SonataAdmin गूगल मंच से लिया के अनुसार: https://groups.google.com/forum/#!topic/sonata-devs/0zML6N13i3U आप वर्ग UnitOfWork के उपयोग करने की जरूरत है:

public function preUpdate($object) 
{ 
    $em = $this->getModelManager()->getEntityManager($this->getClass()); 
    $original = $em->getUnitOfWork()->getOriginalDocumentData($object); 
} 
इस प्रकार

आप: http://www.doctrine-project.org/api/orm/2.3/class-Doctrine.ORM.UnitOfWork.html

इस तरह से करते हैं अपनी डेटाबेस इकाई के मानों की एक सरणी प्राप्त करें। उदा: मूल्य पासवर्ड अपने संस्था की करने के लिए पहुँच प्राप्त करने के लिए:

$password = $original['password']; 

सब है कि। का आनंद लें :)

+11

याद रखें कि MongoDB के लिए आप unitOfWork पर एक विधि के रूप लेकिन mysql के लिए 'getOriginalDocumentData' का प्रयोग करेंगे आप 'getOriginalEntityData' का उपयोग करने की आवश्यकता होगी। –

0

यदि आप डेटाबेस से उत्पाद प्राप्त करने के लिए प्रीअपडेट फ़ंक्शन में केवल एक सिद्धांत क्वेरी करते हैं तो आपके पास पुरानी वस्तु होगी। फिर तुलना करें और आप जाने के लिए अच्छे हैं।

+0

गीर्ट Wille, अपने समाधान –

+0

यह होगा काम नहीं करेगा, लेकिन अपने समाधान के लिए एक बेहतर एक है ... –

संबंधित मुद्दे