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)"}
[]
Best Answer
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