【发布时间】:2016-02-24 21:37:29
【问题描述】:
我浏览了整个网络,似乎只有我对此感到恼火/沮丧...
让我解释一下。
我正在使用 Doctrine2 构建一系列实体
像这样的
(省略所有 Doctrine 注释、getter 和 setter):
<?php
class Article
{
protected $id;
protected $name;
protected $categories = [];
}
class Category
{
protected $id;
protected $name;
protected $articles = [];
}
// create some categories
$cat1 = new Category();
$cat1->setName('cat-01');
$cat2 = new Category();
$cat2->setName('cat-02');
$cat3 = new Category();
$cat3->setName('cat-03');
// new Article
$article = new Article();
$article->setName('foo');
$article->setCategories([$cat1, $cat2, $cat3]);
现在,如果你需要过滤文章的类别,你必须使用 array_filter();
$cats = array_filter($article->getCategories(), function($cat) {
return $cat->getName() === 'cat-01';
});
对....有道理。
但是,一旦 Article 对象被持久化并从 DB 中恢复,您就可以使用 PersistentCollection::filter(Closure $c) 方法 array_filter 不起作用
$entityManager->persist($article);
$entityManager->flush();
$article = $entityManager->getRepository('Article')->findById(1);
$cats = $article->getCategories()->filter(function($cat) {
return $cat->getName() === 'cat-01';
});
array_map() 与 PersistentCollection::map() 相同
或 current() 与 PersistentCollection::current()
等等等等等等。
现在...
问题是,有没有办法让我的非持久实体以与持久实体相同的方式工作?
或者有没有办法在持久和非持久实体上进行这项工作?
$cats = $article->getCategories()->filter(function($cat) {
return $cat->getName() === 'cat-01';
});
【问题讨论】:
标签: php doctrine-orm