Questions tagged «doctrine»

Doctrine Project是一个开源库和工具的集合,这些库和工具用于处理用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(); …

19
教义-如何打印出真正的sql,而不仅仅是准备好的语句?
我们正在使用PHP ORM Doctrine。我正在创建这样的查询: $q = Doctrine_Query::create()->select('id')->from('MyTable'); 然后在函数中添加各种where子句和适当的东西,像这样 $q->where('normalisedname = ? OR name = ?', array($string, $originalString)); 稍后,在execute()为该查询对象添加对象之前,我想打印出原始SQL以便对其进行检查,并执行以下操作: $q->getSQLQuery(); 但是,这只会打印出准备好的语句,而不是完整的查询。我想查看它发送给MySQL的内容,但是它正在打印出一条准备好的语句,包括?。有什么办法可以查看“完整”查询吗?

10
PHP ORM:教义与Propel
我正在用symfony开始一个新项目,该项目可以很容易地与Doctrine和Propel集成在一起,但是我当然需要做出选择...。我想知道是否有更多有经验的人在使用这些工具时有普遍的利弊?这两个中的任何一个? 非常感谢。 编辑: 感谢所有的答复,有用的东西。这个问题没有真正正确的答案,因此,我只将获得最多票数的人标记为已批准。
126 php  orm  symfony1  doctrine  propel 

5
用Doctrine按多列排序
我需要按两列排序数据(当行的第1列具有不同的值时,按此排序;否则按第2列进行排序) 我正在使用QueryBuilder创建查询。 如果我orderBy第二次调用该方法,它将替换以前指定的任何顺序。 我可以将两列作为第一个参数传递: ->orderBy('r.firstColumn, r.secondColumn', 'DESC'); 但是我不能为第二个参数传递两个排序方向,因此当我执行此查询时,第一列按升序排序,第二列按降序排序。我想对它们两个都使用降序。 有没有办法做到这一点QueryBuilder?我需要使用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; …


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。

1
Cascade = {“删除”} VS orphanRemoval = true VS ondelete =“ CASCADE
我尝试收集一些有关以下方法的信息,这些方法是在删除父实体时自动删除子实体的。似乎最常见的方法是使用这三个注释之一:层叠= {“删除”} OR orphanRemoval = true或ondelete =“ CASCADE”。 我对第三个混淆不清:ondelete =“ CASCADE”,因为在教义的官方文档中对此的解释非常稀缺),如果有人可以确认我从我的研究中收集并理解的以下信息,我将非常希望网络和经验... 它能做什么 Cascade = {“ remove”} ==>如果拥有拥有者实体,则删除拥有相反实体的实体。即使您与其他拥有的附属实体有很多关系。 -应该在集合上使用(因此在OneToMany或ManyToMany关系中使用)-ORM中的 实现 orphanRemoval = true ==>当拥有方实体为AND时,将删除反方的实体,并且该实体不再与任何其他拥有方实体连接。(参考 doctrine official_doc -ORM中的实现 -可以与OneToOne,OnetoMany或ManyToMany一起使用 onDelete =“ CASCADE” ==>这会将On Delete Cascade添加到数据库中的外键列中 -这种策略有点棘手,但是可以非常强大和快速。(请 参阅doctrine official_doc ...,但尚未阅读更多说明) -ORM要做的工作更少(与前两种方法相比),因此应该具有更好的性能。 其他信息 -所有这三种方式都是在双向关系实体上实现的(右???) -使用cascade = {“ remove”}完全绕过onDelete = CASCADE上的任何外键。(参考doctrine_official_doc) 有关如何在代码中使用它的示例 orphanRemoval和cascade = {“ …

2
什么是主义水合?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我已经在该学说的文档中阅读了有关水合作用的内容,但是我仍然不明白它是什么。 有人可以解释一下吗?

12
如何在Symfony 2.0 AJAX应用程序中将Doctrine实体编码为JSON?
我正在开发游戏应用程序并使用Symfony 2.0。我对后端有很多AJAX请求。更多的响应是将实体转换为JSON。例如: class DefaultController extends Controller { public function launchAction() { $user = $this->getDoctrine() ->getRepository('UserBundle:User') ->find($id); // encode user to json format $userDataAsJson = $this->encodeUserDataToJson($user); return array( 'userDataAsJson' => $userDataAsJson ); } private function encodeUserDataToJson(User $user) { $userData = array( 'id' => $user->getId(), 'profile' => array( 'nickname' => $user->getProfile()->getNickname() ) …


2
如何在Doctrine查询中指定空值作为过滤器?
我在Zend中使用Doctrine 1.1。我正在尝试编写一个查询,该查询将返回在特定列中具有空值的记录。 $q = Doctrine_Query::create() ->select('a.*') ->from('RuleSet a') ->where('a.vertical_id = ?', null); $ruleset_names_result = $q->execute(array(), Doctrine::HYDRATE_ARRAY); 我在规则集表中有3条记录,在vertical_id列中具有NULL值,但查询未找到这些记录。 感谢帮助。 席德
79 php  null  doctrine  dql 



3
原则2:使用查询生成器更新查询
嗨,我有以下查询,但似乎无法正常工作。 $q = $this->em->createQueryBuilder() ->update('models\User', 'u') ->set('u.username', $username) ->set('u.email', $email) ->where('u.id = ?1') ->setParameter(1, $editId) ->getQuery(); $p = $q->execute(); 这将返回以下错误消息: 致命错误:未捕获的异常'Doctrine \ ORM \ Query \ QueryException',消息为[[语义错误]第0行,列38位于'testusername WHERE'附近:错误:'testusername'未定义。在... 我会很高兴的
74 php  sql  database  doctrine 

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.