Add me to the list of people who can't work out what's wrong with their Doctrine mapping. I'm modelling a Chess Game
with OneToMany Halfmoves
- any ideas?
DDL:
create table game ( game_id int primary key );
create table halfmove(halfmove_id int primary key, game_id int);
Game.php:
/**
* Game
*
* @ORM\Table(name="game")
* @ORM\Entity
*/
class Game
{
/**
* @ORM\OneToMany(targetEntity="Halfmove", mappedBy="game")
*/
private $halfmoves;
public function getHalfmoves(){
return $this->halfmoves;
}
public function setHalfmoves($halfmoves){
$this->$halfmoves = $halfmoves;
}
public function __construct()
{
$this->halfmoves = new ArrayCollection();
}
...
Halfmove.php:
/**
* Halfmove
*
* @ORM\Table(name="halfmove")
* @ORM\Entity
*/
class Halfmove
{
/**
* @var integer
*
* @ORM\Column(name="game_id", type="integer", nullable=true)
*/
private $gameId;
/**
* @ORM\ManyToOne(targetEntity="Game", inversedBy="halfmoves")
* @ORM\JoinColumn(name="game_id", referencedColumnName="game_id")
*/
private $game;
public function getGame(){
return $this->game;
}
public function setGame($game){
$this->game = $game;
}
...
Query that generates error:
$em = $this->getDoctrine()->getManager();
$query = $em
->createQuery(
'SELECT p, c FROM AppBundle:Halfmove p
JOIN p.Game c
WHERE c.game_id = :id'
)->setParameter('id', 3525);
$result = $query->getSingleResult();
Error message:
2016-11-28 12:46:46] request.CRITICAL: Uncaught PHP Exception Doctrine\ORM\Query\QueryException: "[Semantical Error] line 0, col 62 near 'c ': Error: Class AppBundle\Entity\Halfmove has no association named Game" at /Users/cats/Sites/chess-ui/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php line 63 {"exception":"[object] (Doctrine\ORM\Query\QueryException(code: 0): [Semantical Error] line 0, col 62 near 'c\n ': Error: Class AppBundle\Entity\Halfmove has no association named Game at /Users/cats/Sites/chess-ui/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php:63, Doctrine\ORM\Query\QueryException(code: 0): SELECT p, c FROM AppBundle:Halfmove p\n JOIN p.Game c\n WHERE c.game_id = :id at /Users/cats/Sites/chess-ui/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php:41)"} []
Try this one :
Change game_id to id in referencedColumnName.
the problem in my case was that Mapping information was not coming from the entity Annotations at all - it was being read from the Xml mappings that were created as part of the reverse engineering (from DB) process. Once these were deleted, the Annotations were used and everything worked as expected.
You declared
$game
inHalfmove
entity. Try after replacingp.Game
withp.game
.Additional Update
Additionally i recommend some changes in you entities.
Game.php
Halfmove.php
Execute Query