Here are the columns and rows of the MySQL tables:
I'm trying to inner join the game.home and game.away with the Team.id, but i'm getting the error: "Error: Class Travel\Bundle\TravelBundle\Entity\Game has no association named home" what am I doing incorrectly?
Here is the desired results I want to achieve, I know how to do it in MySQL, but not Symfony and Doctrine:
select
t1.id as gameid,
t1.season as gameseason,
t1.gametype as gametype,
t2.id as homeid,
t2.name as homename,
t2.abbreviation as homeabbreviation,
t2.type as hometype,
t2.image as homeimage,
t3.id as awayid,
t3.name as awayname,
t3.abbreviation as awayabbreviation,
t3.type as awaytype,
t3.image as awayimage from Game t1
INNER JOIN Team t2 on t1.home = t2.id
INNER JOIN Team t3 on t1.away = t3.id;
Here are my Doctrine entities:
Game.orm.yml:
Travel\Bundle\TravelBundle\Entity\Game:
type: entity
OneToOne:
targetEntity: Travel\Bundle\TravelBundle\Entity\Team
JoinColumn:
name: home
referencedColumnName: id
repositoryClass: Travel\Bundle\TravelBundle\Entity\GameRepository
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
home:
type: integer
away:
type: integer
season:
type: string
gametype:
type: integer
username:
type: string
lifecycleCallbacks: { }
Team.orm.yml
Travel\Bundle\TravelBundle\Entity\Team:
type: entity
table: null
repositoryClass: Travel\Bundle\TravelBundle\Entity\TeamRepository
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
name:
type: string
length: 255
abbreviation:
type: string
length: 255
type:
type: string
length: 255
name:
type: string
length: 255
image:
type: string
length: 255
username:
type: string
length: 255
lifecycleCallbacks:
prePersist: [ uploadImage ]
prePersist: [ preUpload ]
preUpdate: [ preUpload ]
postPersist: [ moveImage ]
preRemove: [ removeImage ]
GameRepository.php
<?php
namespace Travel\Bundle\TravelBundle\Entity;
use Doctrine\ORM\EntityRepository;
/**
* GameRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class GameRepository extends EntityRepository
{
public function allByUsername($username)
{
$query = $this->getEntityManager()
->getRepository('TravelTravelBundle:Game')
->createQueryBuilder('t')
->select('t','g')
->innerJoin('t.home', 'g')
->setParameter('username', $username);
$token = $query->getQuery()->getResult();
return $token;
}
}
?>