Symfony2 oneToMany 问题!
现在有两张表,category 和 article。
category:
/**
* @Mapping\Entity
* @Mapping\Table(name="category")
*/
class Category
{
/**
* @Mapping\Id
* @Mapping\Column(type="integer")
* @Mapping\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @Mapping\OneToMany(targetEntity="Article", mappedBy="category")
*/
protected $articles;
// ...
}
article:
/**
* @Mapping\Entity
* @Mapping\Table(name="article")
*/
class Article
{
/**
* @Mapping\Id
* @Mapping\Column(type="integer")
* @Mapping\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @Mapping\ManyToOne(targetEntity="Category", inversedBy="articles")
* @Mapping\JoinColumn(name="categoryid", referencedColumnName="id")
*/
protected $category;
/**
* @Mapping\Column(type="string", columnDefinition="enum('published', 'draft')")
*/
protected $status;
// ...
}
我的问题是, $category->getArticles() 方法可以获取指定分类下的 articles,但是,如果我只想获取 status="published" 时怎么办呢?我看过文档,oneToMany 中不能设定条件
同时,在 twig 中使用 category.articles|length 来显示指定分类下的文章数,也只能返回全部的文章,这种场景怎么写呢?。
另外,我现在在 CategoryRepository 中使用 JOIN 加上条件查询出来,但在 twig 中显示出来的结果就还是忽略了 status 条件:
return $this->createQueryBuilder('c')
->leftJoin('c.articles', 'a', 'WITH', 'a.status = :status')
->groupBy('c.id')
->setParameter('status', 'published')
->getQuery()
->getResult();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
class Category
{
...
public function getPublishedArticles()
{
}
从articles的角度解决问题。
在controller里面
然后view里面就可以用articles|length了。