【发布时间】:2014-04-17 02:46:17
【问题描述】:
我想将两个表连接在一起,以便在一次搜索中检索所有实体。我有一对多的关系:绝地和成员。一个成员组可以有许多绝地武士。我想制作一个表单来按一个实体搜索并将所有信息作为一个整体显示。
示例:按指定颜色搜索绝地 -> 检索姓名、年龄、性别、颜色和等级。
Jedi.php:
class Jedi
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var integer
*
* @ORM\Column(name="age", type="integer")
*/
private $age;
/**
* @var string
*
* @ORM\Column(name="gender", type="string", length=255)
*/
private $gender;
/**
*
* @ORM\ManyToOne(targetEntity="Member", inversedBy="jedi")
* @ORM\JoinColumn(name="member", referencedColumnName="id")
*/
private $member;
会员.php:
class Member
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="rank", type="string", length=255)
*/
private $rank;
/**
* @var string
*
* @ORM\Column(name="color", type="string", length=255)
*/
private $color;
/**
* @var integer
* @ORM\OneToMany(targetEntity="Jedi", mappedBy="member")
*
*/
protected $jedi;
在我的 JediRepository.php 中:
class JediRepository extends EntityRepository
{
public function findJediByColor($color) {
$query = $this->getEntityManager()
->createQuery(
'SELECT color, rank
FROM YodaBundle:Member member
JOIN member.jedi
WHERE member.color = :color'
)->setParameter('color', $color);
try {
return $query->getSingleResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
}
现在我很确定我的查询连接语句可能全错了,我对如何使用它感到很困惑。任何帮助将不胜感激!
【问题讨论】:
-
我承认对教义不太熟悉,但如果桌子是
YodaBundle:Member,绝地桌子不是YodaBundle:Jedi吗? -
@steven 你的意思是在查询中?
标签: php symfony join doctrine-orm