Fehler beim targetEntity ist in einem anderen bundle
Ich bin immer folgende Fehlermeldung, wenn ich versuche zu tun ./app/console doctrine:migrate:diff
:
[Doctrine\ORM\Mapping\MappingException]
Class VNN\CoreBundle\Entity\Game is not a valid entity or mapped super class.
Hier ist die Linie, die es verursacht:
/**
* @ORM\ManyToOne(targetEntity="VNN\CoreBundle\Entity\Game")
Hier ist der relevante Teil meiner Klasse:
<?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;
Dem, was ich verstehe, es ist zu sagen ist nicht, dass es nicht finden VNN\CoreBundle\Entity\Game
nur, dass Game
ist kein gültiges Element. So, hier ist 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;
}
}
Warum sollte es nicht wie Game
?
Update: ich hatte das exakt gleiche problem wieder, als ich versuchte zu tun die gleiche Sache mit einer anderen cross-bundle-Einheit. Ich fand dieser Beitrag, aber das add-a-leading-slash fix habe es nicht für mich wie es sich offenbar für den OP gibt.
- Haben Sie versuchen, verwenden Sie "\VNN\CoreBundle\Entity\Game" statt "VNN\CoreBundle\Entity\Game"?
- Ja. Es hat nicht wie, dass, Sie entweder.
- Welche version von Symfony und doctrine benutzen Sie? Ich habe das gleiche setup in einem meiner Projekte, und es funktioniert es :/ Aber ich Stimme mit Ihnen überein, dass es aussieht wie Spiel ist nicht gültig, jedoch, wenn man in der Lehre-code, die Meldung sollte nur kommen, wenn die Klasse nicht annotiert werden, als eine Lehre\ORM\Mapping\Entität, die diese eindeutig ist...
Du musst angemeldet sein, um einen Kommentar abzugeben.
habe ich erfolgreich eingesetzt cross bundle entity-Beziehungen ohne Probleme. wenn Sie die automatische Zuordnung deaktiviert ist, müssen Sie sagen, die Lehre jedes bundle enthält Entitäten.
also in app/config.yml müssen Sie entweder dieses:
oder so:
überprüfen Sie Ihre Datenbank, wenn die Tabellen für die bundles bestehen. auch Sie könnten versuchen, laufen
./app/console doctrine:generate:entities --force
und stellen Sie sicher, dass es ohne Fehler läuftBearbeiten
ich habe meine code und die führenden
/
ist nicht notwendig. auch dieuse
- Anweisung ist überflüssig.auto_mapping
, also versuchte ich, Ihren zweiten Vorschlag, machen Sie sicher, dass jeder der meine Zuordnungen sind explizit aufgeführt. Ich bin immer ein anderer Fehler, jetzt auf der Suche in der falschen Datenbank - aber, der Fehler ist viel leichter zu schlucken als das, was ich immer vor. Danke!War ich in der Lage, etwas zu bekommen, wie diese arbeiten in meine Bündel.
Müssen Sie nicht die
use \Company\SomeBundle\Entity\Game
- Anweisung.Stellen Sie außerdem sicher, dass beide bundles sind aktiviert in Ihrem
AppKernel.php
Datei.