我试图用一些用户对象预先填充数据库,但是当我调用$user->setPassword('some-password'); 然后保存用户对象,string“some-password”直接存储在数据库中,而不是哈希+密码。 我的DataFixture类: // Acme/SecurityBundle/DataFixtures/ORM/LoadUserData.php <?php namespace Acme\SecurityBundle\DataFixtures\ORM; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Common\Persistence\ObjectManager; use Acme\SecurityBundle\Entity\User; class LoadUserData implements FixtureInterface { public function load(ObjectManager $manager) { $userAdmin = new User(); $userAdmin->setUsername('System'); $userAdmin->setEmail('system@example.com'); $userAdmin->setPassword('test'); $manager->persist($userAdmin); $manager->flush(); } } 和相关的数据库输出: id username email salt password 1 System system@example.com 3f92m2tqa2kg8cookg84s4sow80880g test
我想开始与Zend Framework开发,我想使用zf2。 由于我使用Doctrine 2,你能提供一些教程来帮助我将它集成到zf2吗? 谢谢!
在自定义表单types中使用Doctrine\Common\Persistence\ObjectManager和Doctrine\ORM\EntityManager什么区别? 我可以使用$this->em->getRepository()和$this->om->getRepository()来获取respository。 class MyFormType extends \Symfony\Component\Form\AbstractType { /** * @var Doctrine\ORM\EntityManager */ protected $em; public function __construct(Doctrine\ORM\EntityManager $em) { $this->em = $em; } } 代替: class MyFormType extends \Symfony\Component\Form\AbstractType { /** * @var Doctrine\Common\Persistence\ObjectManager */ protected $om; public function __construct(Doctrine\Common\Persistence\ObjectManager $om) { $this->om = $om; } }
注:如果我想要的是不可能的,一个“不可能”的答案将被接受 在有关inheritance映射的Doctrine 2文档中 ,它说有两种方法: 单表inheritance(STI) 类表inheritance(CTI) 对于这两个,有警告: 如果您使用STI / CTI实体作为多对一或一对一的实体,则不应将inheritance层次上层的其中一个类用作“targetEntity”,而只能使用那些没有子类的类。 否则,Doctrine不能创build这个实体的代理实例,并总是急切地加载实体。 那么,我该如何继续使用基类(抽象)类的关联inheritance ? (并保持当然的performance) 例 一个用户有许多Pet (由Dog或Cat扩展的抽象类)。 我想做的事 : class User { /** * @var array(Pet) (array of Dog or Cat) */ private $pets; } 由于在Doctrine文件中的警告,我应该这样做: class User { /** * @var array(Dog) */ private $dogs; /** * @var array(Cat) */ private $cats; } 这很烦人,因为我失去了inheritance的好处! […]
如何在服务容器中使用Doctrine? 该代码只是导致错误消息“致命错误:调用未定义的方法… :: get()”。 <?php namespace …\Service; use Doctrine\ORM\EntityManager; use …\Entity\Header; class dsdsf { protected $em; public function __construct(EntityManager $em) { $this->em = $em; } public function create() { $id = 10; $em = $this->get('doctrine')->getEntityManager(); $em->getRepository('…')->find($id); } } services.yml service: site: class: …\Service\Site
假设我检索一个实体$e并用setter修改它的状态: $e->setFoo('a'); $e->setBar('b'); 有没有可能检索已更改的字段数组? 在我的例子的情况下,我想检索foo => a, bar => b作为结果 PS:是的,我知道我可以修改所有访问器并手动实现此function,但我正在寻找一些方便的方法来做到这一点
假设我有实体$e 。 有没有任何通用的方式来存储它作为另一行,将具有相同的实体数据,但另一个主键? 为什么我需要这个:我正在实现某种时态数据库模式,而不是更新行,我只需要创build另一个。
我正在开发游戏应用程序,并使用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() ) ); $jsonEncoder […]
我想知道什么是最好的,最简单的方法来处理Doctrine2中的多对多关系。 假设我们已经有了Metallica 的木偶大师 ( Master of Puppets)等几张专辑。 但是请注意一个曲目可能会出现在更多的专辑中,比如Metallica的Battery – 三张专辑都以这个曲目为特色。 所以我需要的是专辑和曲目之间的多对多关系,使用第三个表格和一些额外的列(比如指定专辑中曲目的位置)。 其实我必须使用,正如Doctrine的文档所build议的那样,要实现这个function,必须使用双重一对多的关系。 /** @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() { […]