2011-11-19 97 views
3

我听说了很多关于ORM主义的好东西。我可以使用像http://www.phpandstuff.com/articles/codeigniter-doctrine-from-scratch-day-1-install-and-setup这样的很好的教程来付出很多努力学习教义,但它已经过时并且正在使用Doctrine 1.x.我更愿意立即学习Doctrine 2.x以节省时间。Doctrine 2.x CRUD

我设法将Doctrine 2.1与Codeigniter 2.0.3结合使用。我已经设法做一些基本操作,比如添加新对象并将它们保存到数据库中。现在我正在尝试一些不应该太难的事情,但我花了相当多的时间来了解如何执行以下操作:

如果我想使用$ _POST数据创建对象,我不会不想分配代码中的每个属性。我更喜欢像$ u-> fromArray这样的东西,例如如图

$data = array(
'username' => 'myuser', 
'password' => 'mypass', 
'email' => '[email protected]' 
); 

$u = new User(); 
$u->fromArray($data); 
$u->save(); 

来源:http://www.phpandstuff.com/articles/codeigniter-doctrine-day-5-database-crud

然而,fromArray()不会在教义2.x的存在了。在Doctrine 2.x中有fromArray()的等价物吗?

第二个问题:我觉得很难开始。官方文件主要关注主义。有一个实际的例子,包括表单验证,crud操作等等,这将是非常好的。使用Doctrine 2有一个MVC示例项目将是非常好的。有人知道这样的教程或示例项目吗?

回答

0

在我见过的每个例子中,以我的经验用Doctrine2编码时,从$ _POST数据创建对象的正确方法是使用实​​体类中的setter单独设置每个属性。

fromArray()当然看起来很方便,但知道Doctrine2如何处理关联,我看不到它让你走得很远。

关于Doctrine2的一个很好的CRUD教程,您可能会喜欢这本书“Easy PHP Websites with Zend Framework”中的sample chapter。这本书本身就是ZF而不是CodeIgniter,但是在Zend特定的示例章节中很少。不过,您可能更愿意远离z2d2示例存储库。

除此之外,本网站在Doctrine2上有许多有用的问题和答案,适用于CRUD上下文。继续发帖,我确信我或其中一个人可以提供帮助。

1

答案是真的,这取决于你。你的实体只是普通的PHP对象 - 所以你可以教他们技巧(比如实现一个fromArray()方法),或者围绕它们构建基础架构。

一些选项,这可能是不适合你的用例:

  • 写构造函数的实体填充属性:new Article($title, $author, $abstract, $body)new Article($arrayOrObject)
  • 写静态工厂方法
  • 写下您的拥有fromArray()实现
  • 在抽象类中编写属于自己的fromArray()实现,并根据需要继承所有实体并可能覆盖它们
0

你可以使用第三方Doctrine模块(如DoctrineModule)而不是实现fromArray()或populate()将数组转换为对象。例如,您可以执行类似操作:

use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator; 

$hydrator = new DoctrineHydrator($objectManager); 

$data = array(
    'username' => 'myuser', 
    'password' => 'mypass', 
    'email' => '[email protected]' 
); 

$user = new User(); 
$user = $hydrator->hydrate($data, $user); 

$em->persist($user); 
$em->flush();