Php Symfony使用语句(where子句)获取映射实体

Php Symfony使用语句(where子句)获取映射实体,php,symfony,doctrine,Php,Symfony,Doctrine,我有一个理解的问题 我有两个映射实体 class news { public function __construct() { $this->newsgroups = new ArrayCollection(); } /** * @ORM\ManyToMany(targetEntity="Unite\NewsBundle\Entity\newsgroup", inversedBy="news") * @OR

我有一个理解的问题

我有两个映射实体

class news
{   
    public function __construct()
    {
        $this->newsgroups = new ArrayCollection();
    }

    /**
     * @ORM\ManyToMany(targetEntity="Unite\NewsBundle\Entity\newsgroup",     inversedBy="news")
     * @ORM\JoinTable(name="news_to_newsgroup")
     **/
     protected $newsgroups;
....
}

我的问题: 在新闻组='x'的情况下,如何获取所有在日期x和y之间处于活动状态的新闻 当我使用我的新闻组对象(函数getNews())时

是否真的有必要用foreach查看每一条新闻,并检查我的情况是否属实


非常感谢我的朋友们对你的帮助:)

我建议你根据自己的情况得到消息。查询将是这样的smth

$query = $repository->createQueryBuilder('n')
            ->innerJoin('n.newsgoup', 'ng')
            ->where('ng.id > :newsGroupId')
            ->where('ng.undate BETWEEN :monday AND :sunday')
            ->setParameter('newsGroupId', '1')
            ->setParameter('monday', '2016-01-02')
            ->setParameter('sunday', '2016-02-17')
            ->getQuery();
    $news = $query->getResult();

我建议你根据自己的情况得到消息。查询将是这样的smth

$query = $repository->createQueryBuilder('n')
            ->innerJoin('n.newsgoup', 'ng')
            ->where('ng.id > :newsGroupId')
            ->where('ng.undate BETWEEN :monday AND :sunday')
            ->setParameter('newsGroupId', '1')
            ->setParameter('monday', '2016-01-02')
            ->setParameter('sunday', '2016-02-17')
            ->getQuery();
    $news = $query->getResult();
您可以使用类来筛选集合

您可以在实体中创建一个额外的方法:

public function getFilteredNews()
{
    $criteria = Criteria::create()
        ->where('isActive', true)
        ->andWhere(Criteria::expr()->between(
            'createdAt', 
            '2016-02-20', 
            '2016-02-25'
        ));

    return $this->getNews()->matching($criteria);
}
或者,您可以使用
ArrayCollection
中的方法,或者为您的实体创建一个存储库,并使用(Anna建议的)获取数据。

您可以使用类筛选集合

您可以在实体中创建一个额外的方法:

public function getFilteredNews()
{
    $criteria = Criteria::create()
        ->where('isActive', true)
        ->andWhere(Criteria::expr()->between(
            'createdAt', 
            '2016-02-20', 
            '2016-02-25'
        ));

    return $this->getNews()->matching($criteria);
}

或者,您可以使用
ArrayCollection
中的方法,或者为您的实体创建一个存储库,并使用(Anna建议的)获取数据。

谢谢您的回答,我正在考虑这种方法。我认为有另一种方法是从许多映射理论中得出的。因此,它就像普通的msqli命令一样,带有条令。非常感谢:)成功了:D-innerJoin自动映射到新闻组,因为有很多映射。完美的谢谢你的回答,我在想这个问题。我认为有另一种方法是从许多映射理论中得出的。因此,它就像普通的msqli命令一样,带有条令。非常感谢:)成功了:D-innerJoin自动映射到新闻组,因为有很多映射。完美的谢谢好吧,我想这就是我一直在寻找的方式。我试试你的解决办法。你认为什么是可持续的、特别是强大的开发的更好的方法?是的,请下次详细说明,比如你正在使用的版本等:)我会推荐QueryBuilder自定义查询,但仍然取决于用例。好吧,我想这就是我一直在寻找的方法。我试试你的解决办法。你认为什么是可持续的、特别是强大的开发的更好的方式?是的,请下次详细说明,比如你正在使用的版本等:)我会推荐QueryBuilder自定义查询,但仍然取决于用例。