Tag: doctrine2

原则中fetch =“EAGER”和fetch =“LAZY”有什么区别?

在Doctrine的注释@ManyToOne中fetch="EAGER"和fetch="LAZY"有什么@ManyToOne ? /** * @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="EAGER") */ /** * @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="LAZY") */

我应该使用EAV模型吗?

我正在为电子商务应用程序devise我的数据库/域,我很难搞清楚如何存储产品。 该网站将出售各种各样的产品,笔,丁字裤,纹身,雨伞,一切。 这些产品中的每一个都会共享一些常见的属性,高度,宽度,长度,重量等,但是一些产品具有特殊的数据。 例如,笔具有不同的墨水颜色和提示/盖子,小册子可以具有不同types的折叠。 到目前为止,我已经想出了20多个额外的属性,但这些属性可能只适用于网站上1%的产品。 所以我想知道是否可以实现一个EAV模型来处理额外的数据。 请记住,当客户在前端查看网站时,会有像eBay和carsales.com.au上的过滤侧边栏。 (所以要记住会有一些查询) 由于系统需要保持灵活性,我认为实现Class Tableinheritance并不现实。 这是因为,沿着轨道,我们可能在将来有更多的属性,新的产品types。 另一件事我已经考虑使用NoSQL数据库(可能是MongoDB),但是我对这些types的数据库没有经验,它甚至可以解决我的问题吗? 审查选项: 具有许多列的单一产品实体 独立属性实体(EAV) 切换到无模式持久性 我正在构build一个具有属性实体的原型,以查看它是多么的灵活,并且testing性能以及查询如何失控。 编辑:当然,我打开任何其他的解决scheme。

如何随机select教条

这里是我如何查询我的数据库的一些单词 $query = $qb->select('w') ->from('DbEntities\Entity\Word', 'w') ->where('w.indictionary = 0 AND w.frequency > 3') ->orderBy('w.frequency', 'DESC') ->getQuery() ->setMaxResults(100); 我正在使用mysql,我想要得到符合条件的随机行,我会在我的查询中使用rand()命令。 我发现这个类似的问题基本上是由于ORDER BY RAND在原理中是不支持的,你可以把主键改为随机的。 但是,这不能在我的情况下完成,因为我有一个search条件和一个where子句,以便不是每个主键都将满足该条件。 我还发现了一个代码片断 ,build议您使用OFFSET来像这样随机化行: $userCount = Doctrine::getTable('User') ->createQuery() ->select('count(*)') ->fetchOne(array(), Doctrine::HYDRATE_NONE); $user = Doctrine::getTable('User') ->createQuery() ->limit(1) ->offset(rand(0, $userCount[0] – 1)) ->fetchOne(); 我有点困惑,这是否会帮助我解决在我的情况下是否随意支持秩序的问题。 我无法在setMaxResult之后添加偏移量。 任何想法如何可以完成?

具有相关实体的深层克隆学说实体

我创build了A与OneToMany关系的实体A ,这个关系和OneToMany有关系。 我必须克隆这个A实体,并使用新的ID将其设置在数据库中。 所有深层次的关系也应该用新的ID进行克隆。 我试过什么是设置A ID为null : $A = clone $A_original; $A->setId(null); $em->persist($A); 它在A表中创build新logging,但不在B和C 。 我应该怎样做A实体的完整副本?

Symfony 2:从存储库创build一个服务

我正在学习Symfony,我一直在尝试使用存储库来创build一个服务。 我已经从generate:entity创build了我的仓库和实体,所以他们应该没问题。 到目前为止,我在我的services.yml中得到的是: parameters: mytest.entity: TestTestBundle:Brand mytest.class: Test\TestBundle\Entity\Brand default_repository.class: Doctrine\ORM\EntityRepository services: myservice: class: %default_repository.class% factory-service: doctrine.orm.default_entity_manager factory-method: getRepository arguments: – %mytest.entity% 但是当我尝试调用该服务时,出现此错误: Catchable Fatal Error: Argument 2 passed to Doctrine\ORM\EntityRepository::__construct() must be an instance of Doctrine\ORM\Mapping\ClassMetadata, none given, called in 然后我试图用一个实体来创build这个服务。 我的services.yml将如下所示: services: myservice: class: %mytest.class% factory-service: doctrine.orm.default_entity_manager factory-method: getRepository arguments: – %mytest.entity% 但为此,我得到: Error: […]

在Doctrine 2.0实体中使用EntityManager

我有2个实体:国家(id,名称)和映射(ID,对象,internalId,externalId)。 国家和地图与协会没有关联(因为地图不仅有国家)。 我需要使用以下条件获取国家/地区的外部ID: country.id = mapping.internalId mapping.object = 'country' 所以我打算在Country中添加函数getExternalId() function getExternalId() { $em = Registry::getEntityManager(); $mapping = $em->getRepository('Mapping')->findOneBy(array( 'object' => 'country', 'internalId' => $this->getId() )); return !empty($mapping) ? $mapping->getExternalId() : false; } 问题: 在实体内部使用EntityManager是不是很好的做法? 如果没有,请解释如何获得外部身份证在我的情况? 也许有可能使用yaml文件关联Country和Mapping? 提前致谢!

在Doctrine QueryBuilder中计算行数

我正在使用Doctrine的QueryBuilder来build立一个查询,我想从查询中得到结果的总数。 $repository = $em->getRepository('FooBundle:Foo'); $qb = $repository->createQueryBuilder('n') ->where('n.bar = :bar') ->setParameter('bar', $bar); $query = $qb->getQuery(); //this doesn't work $totalrows = $query->getResult()->count(); 我只是想运行一个计数在这个查询来获得总行,但不返回实际的结果。 (在这个计数查询之后,我将使用maxResults进一步修改查询分页。)

做一个WHERE ..在学说2中的子查询

我想select具有特定项目的所有订单中的订单项目。 在SQL中,我会这样做: SELECT DISTINCT i.id, i.name, order.name FROM items i JOIN orders o ON i.order_id=o.id WHERE o.id IN ( SELECT o2.id FROM orders o2 JOIN items i2 ON i2.order_id=o2.id AND i2.id=5 ) AND i.id != 5 ORDER BY o.orderdate DESC LIMIT 10 我将如何做查询生成器这个查询?