2011-11-19 116 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();