首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展Doctrine实体以添加业务逻辑

扩展Doctrine实体以添加业务逻辑
EN

Stack Overflow用户
提问于 2012-08-29 14:06:18
回答 3查看 3.3K关注 0票数 8

我试图实践一个好的设计和扩展的原则实体。我的扩展类,即模型,将具有额外的业务逻辑+对实体基本数据的访问。

我正在使用Doctrine2.2.1&ZendFramework1.11.4& php 5.3.8

当我使用DQL时,原则成功地返回了模型实体。当我使用Doctrine本机find()函数时,它不返回任何内容:( )。

救命..。

它是这样滚动的:

Bootstrap.php

代码语言:javascript
复制
    $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中的模型

代码语言:javascript
复制
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();
}

实体检索功能

不工作

代码语言:javascript
复制
$userEntity = $registry->entityManager->find('Models\User', $userEntity);

WORKS

代码语言:javascript
复制
$qry = $qb
        ->select('u')
        ->from('Models\User','u'); 
EN

回答 3

Stack Overflow用户

发布于 2013-08-07 02:34:16

您不应该将业务逻辑添加到实体中,而是应该使用模型。这样做的一种方法是:

  1. 使用业务逻辑模型。
  2. 为所有数据库查询(DQL或其他)创建自定义Doctrine 2存储库。
  3. 离你们的实体远点。

实际上,这意味着模型是普通的PHP类(或者根据所使用的内容扩展了框架),但是模型与数据库没有任何关系。然而,您的模型会实例化定制的Doctrine 2存储库。例如,UserRepository可能包含一个名为getUserById的方法。在存储库中运行实际的查询,并返回模型要处理的实体实例。

1

票数 4
EN

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2013-02-05 12:15:09

我想做的是一次糟糕的练习。正如@Ivanšnjak所提到的,我将zend中的DB实体和工具耦合在一起。

应该做的是去耦合。

业务逻辑应该在服务\控制器中,并且这些逻辑应该处理实体及其方法。您应该将助手函数添加到理论实体中,即只与实体属性相关。

关于我的主要目的(拥有一个Doctrine可以重写和更新的实体类):doctrine只从本机字段\方法中的更改中搜索,相应地更新它们并丢弃所有其他函数(helpers)。因此,当让教条更新php实体时没有问题!

附注:搬到symfony2去。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12179812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档