我有点困惑,为什么这不起作用。
我有两个实体,一个叫做user的实体和一个叫做shed的实体。 1个用户可以有多个棚子,1个棚子可以属于1个用户。
他们与ManyToOne
连接class User
{
/**
* @var boolean
*
* @ORM\Column(columnDefinition="TINYINT(1) NOT NULL")
*/
protected $active = true;
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Shed", mappedBy="user")
*/
protected $shed;
}
class Shed
{
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="shed")
* @ORM\JoinColumn(name="user", referencedColumnName="id", onDelete="CASCADE")
*
* @var User
*/
protected $user;
/**
* @var boolean
*
* @ORM\Column(columnDefinition="TINYINT(1) NOT NULL")
*/
protected $published = false;
}
我想要实现的是,我查询已发布的活跃用户的最新3个棚。
在我的ShedRepository中,我有以下方法:
class ShedRepository
{
public function getNewestSheds()
{
$query = $this->createQueryBuilder('s')
->join('AppBundle:User', 'u')
->andWhere('u.active = 1')
->andWhere('s.published = 1')
->orderBy('s.createdAt', 'DESC')
->setMaxResults(3)
->getQuery();
return $query->getResult();
}
}
当shed.published属性为0时,没有显示棚屋。如果棚子已经发布但是用户处于非活动状态,那么也会显示棚屋,但不应该。 任何人都可以帮助我吗?
答案 0 :(得分:1)
active
属性的正确注释应为:
/**
* @var boolean
*
* @ORM\Column(name="active", type="boolean", columnDefinition="TINYINT(1) NOT NULL")
*/
(您忘记指定列的名称和类型,这使得属性未映射,因此它始终为真)
与Shed实体的已发布属性类比。
编辑(正确答案):
你有错误的join()调用。您需要使用:->join('s.user', 'u')