Questions tagged «doctrine-orm»

主义ORM是PHP ORM。当Doctrine 1.2使用活动记录模式时,Doctrine ORM 2及更高版本使用数据映射器模式。Doctrine项目是用于处理用PHP编写的数据库抽象和对象关系映射的开放源代码库和工具的集合。


14
Doctrine2:处理引用表中额外列的多对多的最佳方法
我想知道在Doctrine2中处理多对多关系的最佳,最简洁和最简单的方法是什么。 假设我们有一张像Metallica的Master of Puppets这样的专辑,上面有多首曲目。但请注意,一个曲目可能会出现在多张专辑中,例如Metallica的Battery一样-三张专辑都在这一曲目中出现。 因此,我需要的是专辑和曲目之间的多对多关系,使用带有一些其他列的第三张表(例如曲目在指定专辑中的位置)。实际上,正如Doctrine的文档所建议的那样,我必须使用双重一对多关系来实现该功能。 /** @Entity() */ class Album { /** @Id @Column(type="integer") */ protected $id; /** @Column() */ protected $title; /** @OneToMany(targetEntity="AlbumTrackReference", mappedBy="album") */ protected $tracklist; public function __construct() { $this->tracklist = new \Doctrine\Common\Collections\ArrayCollection(); } public function getTitle() { return $this->title; } public function getTracklist() { return $this->tracklist->toArray(); …

2
关于使用doctrine2删除级联
我试图做一个简单的例子,以学习如何从父表中删除一行并使用Doctrine2自动删除子表中的匹配行。 这是我正在使用的两个实体: Child.php: <?php namespace Acme\CascadeBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="child") */ class Child { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"}) * * @ORM\JoinColumns({ * @ORM\JoinColumn(name="father_id", referencedColumnName="id") * }) * * @var father */ private $father; } 父亲.php …

10
在教义QueryBuilder中计算行数
我正在使用Doctrine的QueryBuilder来构建查询,并且我想从查询中获取结果的总数。 $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进一步修改查询以进行分页。)


13
如何在教义2中使用WHERE IN
我有以下代码给我错误: Message: Invalid parameter number: number of bound variables does not match number of tokens 码: public function getCount($ids, $outcome) { if (!is_array($ids)) { $ids = array($ids); } $qb = $this->getEntityManager()->createQueryBuilder(); $qb->add('select', $qb->expr()->count('r.id')) ->add('from', '\My\Entity\Rating r'); if ($outcome === 'wins') { $qb->add('where', $qb->expr()->in('r.winner', array('?1'))); } if ($outcome === 'fails') { …

5
如何获得一维标量数组作为dql学说的查询结果?
我想从Auction表的id列中获取值数组。如果这是原始SQL,我会写: SELECT id FROM auction 但是,当我在Doctrine中执行并执行以下操作时: $em->createQuery("SELECT a.id FROM Auction a")->getScalarResult(); 我得到这样的数组: array( array('id' => 1), array('id' => 2), ) 相反,我想得到一个像这样的数组: array( 1, 2 ) 我该如何使用教义做到这一点?
116 php  doctrine-orm 

2
教义2中的代理是什么?
我刚读完所有《 Doctrine 2》文档,开始了自己的沙箱,了解了大多数原理,但是仍然有一个问题,我在文档中找不到任何完整的解释。 什么是Proxy课程? 我应何时在实体上使用它们? 据我了解,代理类增加了一层,可让您向实体添加其他功能,但是为什么要使用代理而不是在实体类中自己实现方法呢?

12
如何排序findAll主义的方法
我一直在阅读Doctrine的文档,但无法找到对findAll()结果进行排序的方法。 我正在使用symfony2 +准则,这是我在Controller内使用的语句: $this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll(); 但我希望结果按用户名升序排列。 我一直试图通过这种方式将数组作为参数传递: findAll( array('username' => 'ASC') ); 但它不起作用(也不会抱怨)。 有没有建立DQL查询的方法?

1
教义2不能在manyToOne关系中使用nullable = false?
一个User有一个Package与它相关联。许多用户可以引用相同的程序包。User没有Package定义就不能存在。User应该拥有这种关系。关系是双向的,因此其中Package有零个或多个用户。 这些要求导致ManyToOne关系为User和OneToMany的关系Package的教义。然而package_id在user表(也就是外键)允许null值。我尝试设置nullable=false但命令: php app/console doctrine:generate:entities DL --path="src" --no-backup 说nullable该关系没有属性ManyToOne。我想念的是什么? class User { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToOne(targetEntity="Package", inversedBy="users") */ private $package; } class Package { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\OneToMany(targetEntity="User", mappedBy="package") */ private $users; …

4
inversedBy和mappingBy有什么区别?
我正在使用Zend Framework 2和Doctrine 2开发应用程序。 虽然书面方式说明,我无法理解之间的差异mappedBy和inversedBy。 我mappedBy什么时候应该使用? 我inversedBy什么时候应该使用? 什么时候不使用? 这是一个例子: /** * * @ORM\OneToOne(targetEntity="\custMod\Entity\Person", mappedBy="customer") * @ORM\JoinColumn(name="personID", referencedColumnName="id") */ protected $person; /** * * @ORM\OneToOne(targetEntity="\Auth\Entity\User") * @ORM\JoinColumn(name="userID", referencedColumnName="id") */ protected $user; /** * * @ORM\ManyToOne (targetEntity="\custMod\Entity\Company", inversedBy="customer") * @ORM\JoinColumn (name="companyID", referencedColumnName="id") */ protected $company; 我进行了快速搜索,发现了以下内容,但仍然感到困惑: 例子1 例子2 例子3
102 php  doctrine-orm 


7
使用“自动”策略时,用学说明确设置ID
我的实体使用以下注释作为其ID: /** * @orm:Id * @orm:Column(type="integer") * @orm:GeneratedValue(strategy="AUTO") */ protected $id; 从一个干净的数据库中,我正在从一个较旧的数据库中导入现有记录,并尝试保留相同的ID。然后,在添加新记录时,我希望MySQL像往常一样自动增加ID列。 不幸的是,Doctrine2似乎完全忽略了指定的ID。 新解决方案 根据以下建议,以下是首选解决方案: $this->em->persist($entity); $metadata = $this->em->getClassMetaData(get_class($entity)); $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); $metadata->setIdGenerator(new \Doctrine\ORM\Id\AssignedGenerator()); 旧解决方案 由于Doctrine脱离ClassMetaData来确定生成器策略,因此必须在EntityManager中管理实体后对其进行修改: $this->em->persist($entity); $metadata = $this->em->getClassMetaData(get_class($entity)); $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); $this->em->flush(); 我刚刚在MySQL上对其进行了测试,它可以按预期工作,这意味着具有自定义ID的实体与该ID一起存储,而没有指定ID的实体则使用lastGeneratedId() + 1。

3
原则和复合唯一键
我想在理论上做复合唯一密钥。这些是我的领域: /** * @var string $videoDimension * * @Column(name="video_dimension", type="string", nullable=false) */ private $videoDimension; /** * @var string $videoBitrate * * @Column(name="video_bitrate", type="string", nullable=false) */ private $videoBitrate; 我该如何证明这些组合在一起的组合键是唯一的组合键?

3
Symfony2和主义-错误:无效的PathExpression。必须是StateFieldPathExpression
我有一个看起来像这样的实体: /** * @Gedmo\Tree(type="nested") * @ORM\Table(name="categories") * @ORM\Entity() */ class Category extends BaseCategory { /** * @ORM\OneToMany(targetEntity="Category", mappedBy="parent") */ protected $children; /** * @Gedmo\TreeParent * @ORM\ManyToOne(targetEntity="Category", inversedBy="children") * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="SET NULL") */ protected $parent; } 我试图运行这样的查询: $qb = $this->em->createQueryBuilder() ->select('c.parent') ->from('Category', 'c'); $result = $qb->getQuery()->getArrayResult(); 但是,我收到以下错误: [Semantical Error] ... …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.