我是symfony的新手,我想要一些建议来创建查询构建器语句。非常简单,我们的想法是从第三个实体获取数据。
我有实体:
/**
* Entity
* @ORM\Entity(repositoryClass="LoungepassBundle\Entity\LoungepassRepository")
* @ORM\Table(name="loungepass_loungepass")
*
*/
class Loungepass{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
// ...
/**
* @ORM\ManyToOne(targetEntity="\AppBundle\Entity\Agency", inversedBy="loungepasses")
* @ORM\JoinColumn(name="agency_id", referencedColumnName="iata8", nullable=false)
*/
private $agency;
//...
}
代理机构实体
class Agency {
/**
* @ORM\Id
* @ORM\Column(type="string", length=8, name="iata8")
*/
protected $id;
//...
/**
* @ORM\OneToMany(targetEntity="LoungepassBundle\Entity\Loungepass", mappedBy="agency")
*/
protected $loungepasses;
/**
* @var Market
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Market")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="sales_country", referencedColumnName="id")
* })
*/
private $market;
//...
}
我想做一个查询,像这样:
public function queryBySlugInContext($slug, $user) {
$query = $this->createQueryBuilder("l")
->where('l.slug = :slug')
->setParameter('slug', $slug);
if(count($user->getAgencies()) > 0){
$query->andWhere(':agencyIds MEMBER OF l.agencies')
->setParameter('agencyIds',$user->getAgencies());
}
能够从位于代理机构实体中的市场属性访问信息。所以基本上,从市场实体中检索信息。
有什么建议吗? 提前谢谢
答案 0 :(得分:-1)
我修改了一下你的代码,但心灵就在这里
当你必须访问从其他表中检索数据时,请记住使用不同的mysql join可以使用doctrine
public function queryBySlugInContext($slug, $user) {
$query = $this->createQueryBuilder("l")
->where('l.slug = :slug')
->setParameter('slug', $slug);
if(0 !== count($user->getAgencies())) {
$query = $query->innerJoin('l.agency', 'a')
->andWhere('a.id IN(:userAgenciesIds)')
->setParameter('userAgenciesIds', array_map(function(Agency $agency) {
return $agency->getId();
}, $user->getAgencies());
}
你应该花点时间阅读互联网上的一些内容,例如学说query builder documentation