2012-04-29 9 views
7

जब मैं ./app/console doctrine:migrate:diff करने की कोशिश मैं निम्नलिखित त्रुटि मिल रही है:समय त्रुटि targetEntity एक अलग बंडल

[Doctrine\ORM\Mapping\MappingException]           
    Class VNN\CoreBundle\Entity\Game is not a valid entity or mapped super class. 

यहाँ लाइन है कि यह पैदा कर रहा है:

/** 
* @ORM\ManyToOne(targetEntity="VNN\CoreBundle\Entity\Game") 

यहाँ प्रासंगिक हिस्सा है मेरी कक्षा का:

<?php 

namespace VNN\PressboxBundle\Entity; 

use Gedmo\Mapping\Annotation as Gedmo; 
use Doctrine\ORM\Mapping as ORM; 
use Doctrine\ORM\Query\Expr\OrderBy; 
use Symfony\Component\Validator\Constraints as Assert; 
use Symfony\Component\Validator\Mapping\ClassMetadata; 
use Symfony\Component\Validator\Constraints\NotBlank; 
use Symfony\Component\Validator\Constraints\Type; 
use VNN\CoreBundle\Entity\Game; 

/** 
* VNN\PressboxBundle\Entity\Event 
* 
* @ORM\Table(name="event") 
* @ORM\Entity 
*/ 
class Event 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="VNN\CoreBundle\Entity\Game") 
    * @ORM\JoinColumn(name="core_game_id", referencedColumnName="game_id") 
    **/ 
    private $coreGame; 

क्या मैं समझता हूँ कि यह कह रहा है नहीं है कि यह नहीं कर सकतेVNN\CoreBundle\Entity\Game खोजें, बस Game मान्य इकाई नहीं है। तो यहाँ Game.php है:

<?php 

namespace VNN\CoreBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* VNN\CoreBundle\Entity\Game 
* 
* @ORM\Table(name="games") 
* @ORM\Entity 
*/ 
class Game 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="game_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var integer $homeSchoolId 
    * 
    * @ORM\Column(name="home_school_id", type="integer") 
    */ 
    private $homeSchoolId; 

    /** 
    * @var integer $awaySchoolId 
    * 
    * @ORM\Column(name="away_school_id", type="integer") 
    */ 
    private $awaySchoolId; 

    /** 
    * @ORM\ManyToOne(targetEntity="School") 
    * @ORM\JoinColumn(name="home_school_id", referencedColumnName="school_id") 
    **/ 
    private $homeSchool; 

    /** 
    * @ORM\ManyToOne(targetEntity="School") 
    * @ORM\JoinColumn(name="away_school_id", referencedColumnName="school_id") 
    **/ 
    private $awaySchool; 

    /** 
    * @ORM\ManyToOne(targetEntity="Sport") 
    * @ORM\JoinColumn(name="sport_id", referencedColumnName="sport_id") 
    **/ 
    private $sport; 

    /** 
    * @var integer $datetime 
    * 
    * @ORM\Column(name="game_datetime") 
    */ 
    private $datetime; 

    /** 
    * @var integer $homeScore 
    * 
    * @ORM\Column(name="home_score", type="integer") 
    */ 
    private $homeScore; 

    /** 
    * @var integer $awayScore 
    * 
    * @ORM\Column(name="away_score", type="integer") 
    */ 
    private $awayScore; 

    public function getId() 
    { 
     return $this->id; 
    } 

    public function getHomeSchool() 
    { 
     if ($this->homeSchoolId > 0) { 
      return $this->homeSchool; 
     } else { 
      return FALSE; 
     } 
    } 

    public function getAwaySchool() 
    { 
     if ($this->awaySchoolId > 0) { 
      return $this->awaySchool; 
     } else { 
      return FALSE; 
     } 
    } 

    public function recordIsValid() 
    { 
     if (!($this->homeSchoolId > 0)) { 
      return FALSE; 
     } 

     if (!($this->awaySchoolId > 0)) { 
      return FALSE; 
     } 

     return TRUE; 
    } 

    public function getSport() 
    { 
     return $this->sport; 
    } 

    public function getHumanDatetime() 
    { 
     $date = new \DateTime($this->datetime); 
     return $date->format('F d, Y g:ia'); 
    } 

    public function getDatetime() 
    { 
     $date = new \DateTime($this->datetime); 
     return $date->format('m/d/Y g:i:s a'); 
    } 

    public function getOpposingSchoolWithRespectToSchoolName($schoolName) 
    { 
     if ($schoolName == $this->getHomeSchool()->getName()) { 
      return $this->getAwaySchool(); 
     } else { 
      return $this->getHomeSchool(); 
     } 
    } 

    public function getHomeScore() 
    { 
     return $this->homeScore; 
    } 

    public function getAwayScore() 
    { 
     return $this->awayScore; 
    } 
} 

Game यह क्यों नहीं करना चाहते हैं?

अपडेट: जब मैंने एक और क्रॉस-बंडल इकाई के साथ एक ही काम करने की कोशिश की तो मुझे यह वही सही समस्या थी। मुझे this post मिला, लेकिन ऐड-ए-अग्रणी-स्लैश फ़िक्स ने मेरे लिए ऐसा नहीं किया जैसा कि स्पष्ट रूप से ओपी के लिए किया गया था।

+0

क्या आपने "वीएनएन \ कोरबंडल \ Entity \ Game" के बजाय "\ VNN \ CoreBundle \ Entity \ Game" का उपयोग करने का प्रयास किया था? –

+0

हाँ। यह पसंद नहीं आया, या तो। –

+0

सिम्फनी और सिद्धांत का कौन सा संस्करण आप उपयोग कर रहे हैं? मेरे पास मेरी परियोजनाओं में से एक में एक ही सेटअप है, और यह वहां काम करता है:/लेकिन मैं आपसे सहमत हूं कि ऐसा लगता है कि गेम वैध नहीं है, हालांकि, सिद्धांत कोड को देखते समय, यह संदेश केवल तभी आना चाहिए जब कक्षा नहीं है एक सिद्धांत \ ORM \ Mapping \ Entity के रूप में एनोटेटेड, जो यह स्पष्ट रूप से है ... –

उत्तर

12

मैंने बिना किसी समस्या के क्रॉस बंडल इकाई संबंधों का सफलतापूर्वक उपयोग किया है। यदि आपके पास स्वचालित मानचित्रण अक्षम है तो आपको प्रत्येक बंडल में सिद्धांतों को बताने की आवश्यकता है जिसमें इकाइयां हैं।

इसलिए एप्लिकेशन/config.yml में आप या तो यह है की जरूरत:

doctrine: 
    orm: 
     auto_mapping: true 

या इस:

doctrine: 
    orm: 
     auto_mapping: false 
     entity_managers: 
      default: 
       mappings: 
        VNNCoreBundle: ~ 
        VNNPressboxBundle: ~ 

अपने डेटाबेस की जाँच करता है, तो बंडलों के लिए टेबल मौजूद हैं। भी आप ./app/console doctrine:generate:entities --force चलाने की कोशिश करें और सुनिश्चित करें कि यह त्रुटियों

संपादित

मैं अपने कोड की जाँच की और प्रमुख / आवश्यक नहीं है बिना चलाता बना सकता है। use कथन भी अनिवार्य है।

+0

ऐसा लगता है कि यह काम करता है। मुझे 'auto_mapping' का उपयोग न करने का कोई कारण होने की अस्पष्ट स्मृति है, इसलिए मैंने यह सुनिश्चित करने के आपके दूसरे सुझाव की कोशिश की कि मेरे प्रत्येक मैपिंग स्पष्ट रूप से सूचीबद्ध हैं। मुझे अब एक अलग त्रुटि मिल रही है - यह गलत डेटाबेस में देख रहा है - लेकिन उस त्रुटि से पहले जो कुछ भी हो रहा था उससे निगलना बहुत आसान है। धन्यवाद! –

+0

में ऑटो मैपिंग का उपयोग न करने के बारे में एक ही अस्पष्ट स्मृति है ... इसे सिद्धांत एक्सटेंशन के साथ कुछ करना पड़ सकता है लेकिन मुझे यकीन नहीं है;) – room13

2

मैं अपने बंडलों में काम करने के लिए ऐसा कुछ प्राप्त करने में सक्षम था।

/** 
* @ORM\ManyToOne(targetEntity="\Company\SomeBundle\Entity\Game") 
*/ 

आपको use \Company\SomeBundle\Entity\Game कथन की आवश्यकता नहीं है।

साथ ही, सुनिश्चित करें कि आपके AppKernel.php फ़ाइल में दोनों बंडल सक्षम हैं।

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