我试图实践一个好的设计和扩展的原则实体。我的扩展类,即模型,将具有额外的业务逻辑+对实体基本数据的访问。
我正在使用Doctrine2.2.1&ZendFramework1.11.4& php 5.3.8
当我使用DQL时,原则成功地返回了模型实体。当我使用Doctrine本机find()函数时,它不返回任何内容:( )。
救命..。
它是这样滚动的:
Bootstrap.php
$classLoader = new \Doctrine\Common\ClassLoader('Entities', APPLICATION_PATH.'/doctrine');
$classLoader->register();
$classLoader = new \Doctrine\Common\ClassLoader('Models', APPLICATION_PATH);
$classLoader->register();APPLICATION_PATH\models\User.php中的模型
namespace Models;
use Doctrine\ORM\Query;
/**
* Models\User
*
* @Table(name="user")
* @Entity
*/
class User extends \Entities\User {
public function __wakeup() {
$this->tools = new Application_App_Tools();
}实体检索功能
不工作
$userEntity = $registry->entityManager->find('Models\User', $userEntity);WORKS
$qry = $qb
->select('u')
->from('Models\User','u'); 发布于 2013-08-07 02:34:16
您不应该将业务逻辑添加到实体中,而是应该使用模型。这样做的一种方法是:
实际上,这意味着模型是普通的PHP类(或者根据所使用的内容扩展了框架),但是模型与数据库没有任何关系。然而,您的模型会实例化定制的Doctrine 2存储库。例如,UserRepository可能包含一个名为getUserById的方法。在存储库中运行实际的查询,并返回模型要处理的实体实例。
1
发布于 2012-08-29 14:30:21
据我所理解,entityManager只负责持久性实体,使用Model\User扩展Entities\User实体将创建另一个实体(存储在docblock中的相同表中),但不会由entityManager管理,也不会与其发生冲突,因为在Entities\User文档块中可能没有提到@InheritanceType("SINGLE_TABLE"):
阅读此文档以获得更多信息http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html
发布于 2013-02-05 12:15:09
我想做的是一次糟糕的练习。正如@Ivanšnjak所提到的,我将zend中的DB实体和工具耦合在一起。
应该做的是去耦合。
业务逻辑应该在服务\控制器中,并且这些逻辑应该处理实体及其方法。您应该将助手函数添加到理论实体中,即只与实体属性相关。
关于我的主要目的(拥有一个Doctrine可以重写和更新的实体类):doctrine只从本机字段\方法中的更改中搜索,相应地更新它们并丢弃所有其他函数(helpers)。因此,当让教条更新php实体时没有问题!
附注:搬到symfony2去。
https://stackoverflow.com/questions/12179812
复制相似问题