php订单模块解耦,php – Doctrine – 从实体中解耦模型

这是交易.

使用Doctrine ORM for PHP,我需要将模型与实体持久层“解耦”.

假设我们有UserEntity,其中包含db映射的所有漂亮内容,

as:注释,属性,setter / getters等.

另一方面,我想要一个单独的User类,它只保存与业务相关的逻辑,例如:User :: getFullName().

此外,我希望用户扩展UserEntity,以便用户继承所有访问方法.

我检查过的可能解决方案对我不起作用:

>只是从实体扩展模型然后在DQL中指定模型不起作用

> make UserEntity / ** @MappedSuperclass * /不起作用,因为在这种情况下,UserEntity“本身并不是一个实体”

> InheritanceType / DiscriminatorColumn / DiscriminatorMap不起作用,因为模型不是实体

有任何想法吗 ?

解决方法:

得了! (> = PHP 5.4解决方案)

例:

假设我们有用户模型.首先创建用户实体:

/**

* @ORM\Table(name="user")

*/

trait UserEntity {

/**

* @var integer

*

* @ORM\Column(name="id", type="integer", nullable=false)

* @ORM\Id

* @ORM\GeneratedValue(strategy="IDENTITY")

*/

protected $id;

/**

* @var string

*

* @ORM\Column(name="first_name", type="string", length=100, nullable=true)

*/

protected $firstName;

/**

* @var string

*

* @ORM\Column(name="last_name", type="string", length=100, nullable=true)

*/

protected $lastName;

// other mapping here...

}

然后创建一个模型并在其中使用实体特征:

/**

* @ORM\Entity

*/

class User {

use UserEntity;

public function getFullName() {

return $this->firstName . ' ' . $this->lastName;

}

}

在用户模型中注意@Entity注释.这是直接使用模型所必需的

在实体经理.

现在假设我们需要一个扩展User one的Admin模型.这有点棘手.

我们必须将@Entity更改为User中的@MappedSuperclass,以便进行扩展.

然后创建Admin模型,将其声明为@Entity,并在其上重新声明表名

使用@Table注释(否则,由于某些原因,Doctrine会因为要获取哪个表而混淆).

看起来像这样:

/**

* @ORM\MappedSuperclass

*/

class User {

use UserEntity;

public function getFullName() {

return $this->firstName . ' ' . $this->lastName;

}

}

/**

* @ORM\Entity

* @ORM\Table(name="user")

*/

class Admin extends User {

public function getFullName() {

return parent::getFullName() . ' (admin)';

}

}

这样,用户和管理模型(=实体)都可以在Doctrine中使用.

我们不能做任何我们通常对实体做的事情:

通过实体管理器查找()它们,直接在查询中使用模型等.

标签:php,orm,doctrine-orm

来源: https://codeday.me/bug/20190628/1320178.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值