php – Doctrine – 从实体中解耦模型
这是交易.
使用Doctrine ORM for PHP,我需要将模型与实体持久层“解耦”. 假设我们有UserEntity,其中包含db映射的所有漂亮内容, as:注释,属性,setter / getters等. 另一方面,我想要一个单独的User类,它只保存与业务相关的逻辑,例如:User :: getFullName(). 此外,我希望用户扩展UserEntity,以便用户继承所有访问方法. 我检查过的可能解决方案对我不起作用: >只是从实体扩展模型然后在DQL中指定模型不起作用 有任何想法吗 ? 解决方法
得了! (> = PHP 5.4解决方案)
简短:使实体成为特征,在模型类中使用实体特征. 例: /** * @ORMTable(name="user") */ trait UserEntity { /** * @var integer * * @ORMColumn(name="id",type="integer",nullable=false) * @ORMId * @ORMGeneratedValue(strategy="IDENTITY") */ protected $id; /** * @var string * * @ORMColumn(name="first_name",type="string",length=100,nullable=true) */ protected $firstName; /** * @var string * * @ORMColumn(name="last_name",nullable=true) */ protected $lastName; // other mapping here... } 然后创建一个模型并在其中使用实体特征: /** * @ORMEntity */ class User { use UserEntity; public function getFullName() { return $this->firstName . ' ' . $this->lastName; } } 在用户模型中注意@Entity注释.这是直接使用模型所必需的 现在假设我们需要一个扩展User one的Admin模型.这有点棘手. /** * @ORMMappedSuperclass */ class User { use UserEntity; public function getFullName() { return $this->firstName . ' ' . $this->lastName; } } /** * @ORMEntity * @ORMTable(name="user") */ class Admin extends User { public function getFullName() { return parent::getFullName() . ' (admin)'; } } 这样,用户和管理模型(=实体)都可以在Doctrine中使用. 我们不能做任何我们通常对实体做的事情:通过实体管理器查找()它们,直接在查询中使用模型等. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |