2013-07-22 5 views
12

मैं एक समस्या मेरे अनुरोधSymfony2 सिद्धांत फेंक NonUniqueResultException

public function getLastViewUpdate($view) 
{ 
    $qb = $this->getEntityManager()->createQueryBuilder(); 

    $result = $qb->select('vu') 
     ->from('EasyApp\ApplicationBundle\Entity\ViewUpdate', 'vu') 
     ->where('vu.view = :view') 
     ->orderBy('vu.date','DESC') 
     ->setParameter('view', $view) 
     ->getQuery() 
     ->getSingleResult(); 

    return $result; 
} 

में NonUniqueResultException फेंक है लेकिन मैं वास्तव में नहीं जानता कि क्यों, मैं शायद कुछ आयात करने के लिए है, लेकिन मैं नहीं मिल सकता है

CRITICAL - Uncaught PHP Exception Doctrine\ORM\NonUniqueResultException: "" at /Users/antoine/Documents/projects/easyApp/application/vendor/doctrine/orm/lib/Doctrine/ORM/AbstractQuery.php line 621 

आपकी मदद के लिए धन्यवाद

उत्तर

32

आप getSingleResult समारोह

/** 
* Gets the single result of the query. 
* 
* Enforces the presence as well as the uniqueness of the result. 
* 
* If the result is not unique, a NonUniqueResultException is thrown. 
* If there is no result, a NoResultException is thrown. 
* 
* @param integer $hydrationMode 
* @return mixed 
* @throws NonUniqueResultException If the query result is not unique. 
* @throws NoResultException If the query returned no result. 
*/ 
public function getSingleResult($hydrationMode = null) 
{ 
    ... 
    if (count($result) > 1) { 
     throw new NonUniqueResultException; 
    } 
    ... 
} 

की घोषणा की जाँच समस्या आप LIMIT सेट कर सकते हैं क्वेरी और ->setMaxResults(1) साथ केवल एक ही परिणाम प्राप्त करने के हल करने के लिए कर सकते हैं।

+0

धन्यवाद यह काम करता है, लेकिन यह बहुत उचित नहीं है, मुझे समझ में नहीं आता कि त्रुटि क्यों फेंकना एक गंभीर त्रुटि बनाते हैं – Ajouve

+1

यह कोई त्रुटि नहीं है, इसका अपवाद है। 'getSingleResult' कोड की जांच करें, मैंने अपना जवाब अपडेट किया। –

+0

ठीक है, लेकिन मेरा मेरा पृष्ठ नहीं लाया गया है और मेरे पास सिम्फनी – Ajouve

1

इसका मतलब यह है कि आपके पास एक ही दृश्य के साथ दो या अधिक व्यूअपडेट हैं।

6

यदि आप 1 से अधिक परिणाम की उम्मीद करते हैं तो getSingleResult का उपयोग न करें ... इस फ़ंक्शन का उपयोग करके आपके परिणाम की एकता जांच होती है, यह इस कार्य का इरादा है।

कई विकल्प:

  • उपयोग getSingleResult और (एक try {...} catch (NonUniuqueResultException $e) {...} तरह अपवाद के साथ सौदा या डुप्लिकेट से बचने के लिए अपने DB संरचना को समायोजित,
  • उपयोग getSingleResult और setMaxResults(1) जोड़ने के लिए, लेकिन यह वास्तव में विश्वास करने के एक अजीब तरीका है अपने डीबी मॉडल,
  • उपयोग getResult और लौट आए परिणामों के साथ कुछ करना।
+1

आपके उत्तर के लिए धन्यवाद – Ajouve

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