我对 symfony/Doctrine 很陌生,并且在查询构建器方面遇到了一些问题:
鉴于此 ER:
以及以下声明:
namespace xxx\SeoBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* xxx\SeoBundle\Entity\Session
*
* @ORM\Table(name="session")
* @ORM\Entity
*/
class Session
{
const repositoryName = "InternetSmSeoBundle:Session";
/**
* @var string $id
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
*/
private $id;
......
/**
* @var Gsite
*
* @ORM\ManyToOne(targetEntity="Gsite")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="gsite_id", referencedColumnName="id")
* })
*/
private $site;
......
}
我需要找到按站点过滤它们的会话。我尝试了以下方法:
$rep = $this->em->getRepository(Session::repositoryName);
$qb = $rep->createQueryBuilder("s");
$qb->setMaxResults(200);
$qb->where("1=1");
$qb->orderBy("time", "desc");
//site
if ($params->site != null){
/** @var Gsite **/
$site = $params->site;
$qb->where($qb->expr()->eq("gsite_id",$site->getId()));
}
甚至
$qb->where($qb->expr()->eq("site",$site));
但它不起作用。在存在多对一外键的情况下过滤数据的正确方法是什么?我需要在我的模型中创建 gsite_id 列的声明吗?
谢谢。