Symfony 一对多 [映射] 在 doctrine:schema:validate 上失败
Symfony one-to-many [Mapping] FAIL on doctrine:schema:validate
我在 Game 和 Expansion 之间有一个一对多的关系。
一个游戏可以有多个扩展,一个扩展可以属于一个游戏。
当我执行 bin/console doctrine:schema:validate 时,出现以下错误:
[Mapping] FAIL - The entity-class 'AppBundle\Entity\Expansion' mapping is invalid:
* The association AppBundle\Entity\Expansion#game refers to the inverse side field AppBundle\Entity\Game#expansions which doesn't
exist.
我找了一遍又一遍,但我似乎找不到缺少的东西,我一定是忽略了什么...
此外,我已经删除了 inversedBy="expansions"- 错误没有出现,但如果我进行树枝转储,它也没有做任何事情:
{{dump(game.expansions)}}
phpmyadmin 中有关系:
- 扩展table:
- 游戏table:
游戏实体
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Game
*
* @ORM\Table(name="game")
* @ORM\Entity(repositoryClass="AppBundle\Repository\GameRepository")
*/
class Game
{
/**
* @ORM\OneToMany(targetEntity="PlayLog", mappedBy="game")
* @ORM\OneToMany(targetEntity="Expansion", mappedBy="game")
* @ORM\OrderBy({"date" = "DESC"})
*/
private $playlogs;
private $expansions;
private $users;
/**
* @return ArrayCollection
*/
public function getUsers()
{
return $this->users;
}
/**
* @param ArrayCollection $users
*/
public function setUsers($users)
{
$this->users = $users;
}
/**
* Game constructor.
*/
public function __construct()
{
$this->playlogs = new ArrayCollection();
$this->expansions = new ArrayCollection();
$this->users = new ArrayCollection();
}
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @Assert\NotBlank()
* @Assert\Length(
* min = "3",
* max = "100"
* )
* @ORM\Column(name="name", type="string", length=255, unique=true)
*/
private $name;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Game
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @return mixed
*/
public function getPlaylogs()
{
return $this->playlogs;
}
/**
* @return mixed
*/
public function getExpansions()
{
return $this->expansions;
}
public function addGameUser(User $user)
{
$this->users[] = $user;
}
}
扩展实体
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Expansion
*
* @ORM\Table(name="expansion")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ExpansionRepository")
*/
class Expansion
{
/**************************
* Relations
*************************/
/**
* @ORM\ManyToOne(targetEntity="Game")
* @ORM\JoinColumn(name="game_id", referencedColumnName="id")
*/
private $game;
/**************************
* Properties
*************************/
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @Assert\NotBlank()
* @Assert\Length(
* min = "3",
* max = "100"
* )
* @ORM\Column(name="name", type="string", length=255, unique=true)
*/
private $name;
/**************************
* Getters and setters
*************************/
/**
* @return mixed
*/
public function getGame()
{
return $this->game;
}
/**
* @param mixed $game
*/
public function setGame($game)
{
$this->game = $game;
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Expansion
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
}
您在游戏实体上的映射似乎很奇怪:
/**
* @ORM\OneToMany(targetEntity="PlayLog", mappedBy="game")
* @ORM\OneToMany(targetEntity="Expansion", mappedBy="game")
* @ORM\OrderBy({"date" = "DESC"})
*/
private $playlogs;
private $expansions;
private $users;
尝试将每个变量的映射 1 分开:
/**
* @ORM\OneToMany(targetEntity="PlayLog", mappedBy="game")
*/
private $playlogs;
/**
* @ORM\OneToMany(targetEntity="Expansion", mappedBy="game")
*/
private $expansions;
/**
* @ORM\OrderBy({"date" = "DESC"})
*/
private $users;
此外,我相信您需要 inversedBy
扩展实体上的映射。
有关类似示例,请参阅 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-bidirectional
我在 Game 和 Expansion 之间有一个一对多的关系。 一个游戏可以有多个扩展,一个扩展可以属于一个游戏。
当我执行 bin/console doctrine:schema:validate 时,出现以下错误:
[Mapping] FAIL - The entity-class 'AppBundle\Entity\Expansion' mapping is invalid: * The association AppBundle\Entity\Expansion#game refers to the inverse side field AppBundle\Entity\Game#expansions which doesn't exist.
我找了一遍又一遍,但我似乎找不到缺少的东西,我一定是忽略了什么...
此外,我已经删除了 inversedBy="expansions"- 错误没有出现,但如果我进行树枝转储,它也没有做任何事情:
{{dump(game.expansions)}}
phpmyadmin 中有关系:
- 扩展table:
- 游戏table:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Game
*
* @ORM\Table(name="game")
* @ORM\Entity(repositoryClass="AppBundle\Repository\GameRepository")
*/
class Game
{
/**
* @ORM\OneToMany(targetEntity="PlayLog", mappedBy="game")
* @ORM\OneToMany(targetEntity="Expansion", mappedBy="game")
* @ORM\OrderBy({"date" = "DESC"})
*/
private $playlogs;
private $expansions;
private $users;
/**
* @return ArrayCollection
*/
public function getUsers()
{
return $this->users;
}
/**
* @param ArrayCollection $users
*/
public function setUsers($users)
{
$this->users = $users;
}
/**
* Game constructor.
*/
public function __construct()
{
$this->playlogs = new ArrayCollection();
$this->expansions = new ArrayCollection();
$this->users = new ArrayCollection();
}
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @Assert\NotBlank()
* @Assert\Length(
* min = "3",
* max = "100"
* )
* @ORM\Column(name="name", type="string", length=255, unique=true)
*/
private $name;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Game
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @return mixed
*/
public function getPlaylogs()
{
return $this->playlogs;
}
/**
* @return mixed
*/
public function getExpansions()
{
return $this->expansions;
}
public function addGameUser(User $user)
{
$this->users[] = $user;
}
}
扩展实体
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Expansion
*
* @ORM\Table(name="expansion")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ExpansionRepository")
*/
class Expansion
{
/**************************
* Relations
*************************/
/**
* @ORM\ManyToOne(targetEntity="Game")
* @ORM\JoinColumn(name="game_id", referencedColumnName="id")
*/
private $game;
/**************************
* Properties
*************************/
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @Assert\NotBlank()
* @Assert\Length(
* min = "3",
* max = "100"
* )
* @ORM\Column(name="name", type="string", length=255, unique=true)
*/
private $name;
/**************************
* Getters and setters
*************************/
/**
* @return mixed
*/
public function getGame()
{
return $this->game;
}
/**
* @param mixed $game
*/
public function setGame($game)
{
$this->game = $game;
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Expansion
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
}
您在游戏实体上的映射似乎很奇怪:
/**
* @ORM\OneToMany(targetEntity="PlayLog", mappedBy="game")
* @ORM\OneToMany(targetEntity="Expansion", mappedBy="game")
* @ORM\OrderBy({"date" = "DESC"})
*/
private $playlogs;
private $expansions;
private $users;
尝试将每个变量的映射 1 分开:
/**
* @ORM\OneToMany(targetEntity="PlayLog", mappedBy="game")
*/
private $playlogs;
/**
* @ORM\OneToMany(targetEntity="Expansion", mappedBy="game")
*/
private $expansions;
/**
* @ORM\OrderBy({"date" = "DESC"})
*/
private $users;
此外,我相信您需要 inversedBy
扩展实体上的映射。
有关类似示例,请参阅 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-bidirectional