我有一个对象,其中包含我的所有文章。
我正在循环我的对象以填充数组,我为每篇文章创建了一个关联表。
在我的对象中我还有一个Categories对象,我想在之前完成的每个关联数组的末尾添加每个类别的标签,但是 我不知道该怎么做..在Categories对象中可能有多个标签。
我的代码:
$articles = $this->entityManager->getRepository('SGBundle:Article')->findBy([], ['id'=>'desc']);
$arrayCollection = [];
foreach($articles as $article) {
$arrayCollection[] = [
'id' => $article->getId(),
'date_publication' => $article->getDatePublication(),
...
];
foreach($article->getCategories() as $categorie) {
$arrayCollection[] = ['categorie' => $categorie->getLibelle()];
}
}
在我的屏幕截图中,每个文章都有一个包含36个值的数组和一个包含1个值的数组,我希望这个表位于包含36个值的表中。有可能吗?
答案 0 :(得分:1)
首先收集类别,然后将'em'添加到文章项目:
foreach($articles as $article) {
$categories = [];
foreach($article->getCategories() as $categorie) {
$categories[] = $categorie->getLibelle();
}
$arrayCollection[] = [
'id' => $article->getId(),
'date_publication' => $article->getDatePublication(),
...
//
'categorie' => $categories,
];
}
答案 1 :(得分:0)
如果article.categories
字段被标记为懒惰,则默认情况下它不会被充电,$article->getCategories()
将在每个循环回合中执行新查询。
在这种情况下,您可能需要一个自定义DQL查询来代替简单的findBy
,以便优化它并在一个请求中获得所需的确切数组。
另请注意,您当前的查询正在获取数据库的所有文章。虽然这可能是您的目的,但请记住,随着数据的增长,这可能会变得非常沉重。在大多数情况下,应该对这种查询进行分页。