私はsymfony/Doctrineにかなり慣れておらず、querybuilderでいくつか問題があります:
この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));
しかし、それは機能しません。多対1の外部キーが存在する場合にデータをフィルタリングする正しい方法は何ですか?モデルにgsite_id列の宣言を作成する必要がありますか?
ありがとう。