मेरे पास एक Project इकाई है और एक नया प्रोजेक्ट बनाते समय मुझे फ़ाइलें अपलोड करने में सक्षम होना चाहिए। इस कारण से मैंने Files इकाई बनाई है जो पथ और प्रोजेक्ट आईडी को सहेजती है। मेरी समस्या यह है कि मुझे नहीं पता कि इसे बनाने के बाद इसे कैसे पुनर्प्राप्त किया जाए। मैं जो करने की कोशिश कर रहा हूं, यहां है

 $projectService->createProject($project,$user,$isWithoutTerm,self::NO_TERM_DEFAULT_VALUE);
            $filesService = $this->get('app.service.files_service');
            foreach ($managerFiles as $managerFile){
                $fileName = $filesService->uploadFileAndReturnName($managerFile);
                $filesService->createFile($fileName,$project->getId(),$user);
            }

वर्तमान में मेरे $project के पास आईडी नहीं है, जिसका अर्थ है कि मैं एक नई फ़ाइल नहीं बना सकता। मैंने सुना है कि मैं $em->retrieve(object) का उपयोग कर सकता हूं, लेकिन वास्तविक फ्लशिंग नियंत्रक में नहीं किया जाता है। अगर मैं इसे अपने createProject फ़ंक्शन में उपयोग करने का प्रयास करता हूं और किसी कारण से इसे वापस कर देता हूं तो मैं नहीं कर सकता। PHPStorm का कहना है कि यह एक शून्य कार्य है। यहाँ createProject में कोड है

        $project->setFromUser($user->getFullName());
        $project->setDepartment($user->getDepartment());
        $project->setIsOver(false);
        $project->setDate(new \DateTime());
        if($isWithoutTerm){
            $project->setTerm(\DateTime::createFromFormat('Y-m-d', $noTermDefaultValue));
        }
        $this->entityManager->persist($project);
        $this->entityManager->flush();

फ्लशिंग के बाद प्रोजेक्ट आईडी को पुनर्प्राप्त करने और मेरे नियंत्रक में इसका उपयोग करने में सक्षम होने का कोई तरीका है?

0
Pavlin Petkov 29 जून 2017, 21:41

2 जवाब

सबसे बढ़िया उत्तर

यह एक दौड़ की स्थिति हो सकती है जहां $प्रोजेक्ट अभी तक उपलब्ध नहीं है और इसलिए सेवा इसे लोड नहीं कर सकती है और इस प्रकार getId() विफल हो जाती है।

सबसे पहले, अपनी प्रोजेक्ट इकाई बनाएं:

//build your $project
$this->entityManager->flush();  

दूसरा, इस $प्रोजेक्ट को अपनी "सेवा" पर भेजें

$projectService->createProject($project,$user,$isWithoutTerm,self::NO_TERM_DEFAULT_VALUE);
$filesService = $this->get('app.service.files_service');
foreach ($managerFiles as $managerFile){
    $fileName = $filesService->uploadFileAndReturnName($managerFile);
    $filesService->createFile($fileName,$project->getId(),$user);
}

अधिक विशेष रूप से यदि आप इसे एक कोशिश/पकड़ में लपेटते हैं तो आप वास्तव में क्या हो रहा है इसकी पहचान कर सकते हैं:

try {

    $project = new Project();
    //build project
    $this->entityManager->flush();

    //load $projectService..

    $projectService->createProject($project,$user,$isWithoutTerm,self::NO_TERM_DEFAULT_VALUE);
    $filesService = $this->get('app.service.files_service');
    foreach ($managerFiles as $managerFile){
        $fileName = $filesService->uploadFileAndReturnName($managerFile);
        $filesService->createFile($fileName,$project->getId(),$user);
    }

}
catch(\Exception $e) {

    //$e->getMessage() will tell you if you're good to go, or if there
    //is actually an issue

}

हालाँकि, यह उतना ही सरल भी हो सकता है जितना कि PHPStorm आपकी getId() विधि का आत्मनिरीक्षण करने में सक्षम नहीं है और इस प्रकार इसे समझ में नहीं आता है। या getId() वास्तव में आईडी नहीं लौटा रहा है।

1
Jake Litwicki 29 जून 2017, 22:26

सिम्फनी को 3.2 और 3.3 से अपग्रेड करने से समस्या ठीक हो गई। मुझे नहीं लगता कि यह संस्करण के कारण ही था, बल्कि वंचित सामान को हटाने और बहुत सी चीजों को बदलने और कुछ ने इसे ठीक कर दिया।

0
Pavlin Petkov 30 जून 2017, 11:17