以下是MySQL表的列和行:
我正在尝试使用Team.id内部加入game.home和game.away,但我收到错误:“错误:Class Travel \ Bundle \ TravelBundle \ Entity \ Game没有名为home的关联“我做错了什么?
这是我想要达到的预期结果,我知道如何在MySQL中实现,但不是Symfony和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;
以下是我的Doctrine实体:
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;
}
}
?>
答案 0 :(得分:0)
根据doctrine documentation,您的映射应如下所示:
<强> Game.orm.yml:强>
Travel\Bundle\TravelBundle\Entity\Game:
type: entity
repositoryClass: Travel\Bundle\TravelBundle\Entity\GameRepository
oneToOne:
home:
targetEntity: Travel\Bundle\TravelBundle\Entity\Team
joinColumn:
name: home
referencedColumnName: id
away:
targetEntity: Travel\Bundle\TravelBundle\Entity\Team
joinColumn:
name: away
referencedColumnName: id