【问题标题】:Is there a way to add a aggregated/calculated field (concat) to a Doctrine entity?有没有办法将聚合/计算字段(concat)添加到 Doctrine 实体?
【发布时间】:2019-11-24 14:58:24
【问题描述】:

我有一个 USER 实体,它包含两个字段:名字和姓氏。

我想知道如何向我的实体添加一个名为 fullname (firstname + ' ' + upper(lastname)) 的虚拟列。

我已经阅读了关于聚合字段的 Doctrine 文档,但我不确定如何在我的上下文中使用它。

我不想为我将在我的用户上启动的每个 DQL 添加一个 concat 和上公式,但我想在我的实体中添加一个计算字段一次。做一个 PHP getter 不是解决办法。

/**
 * User
 *
 * @ORM\Table(name="[user]")
 * @ORM\Entity(repositoryClass="UserRepository")
 */
class User
{
    /**
     * @var string|null
     *
     * @ORM\Column(name="lastname", type="string")
     */
    private $lastname;

    /**
     * @var string|null
     *
     * @ORM\Column(name="firstname", type="string")
     */
    private $firstname;
}

如果我将这样的聚合字段添加到我的实体:

/**
 * @ORM\Column(type="string")
 */
private $fullName='';

public getFullName(){
     return $this->firstname . ' ' . $this->lastname;
}

当我在用户实体(无效的列名)上调用 find() 或 findAll() 时,我的代码崩溃

【问题讨论】:

    标签: doctrine-orm doctrine


    【解决方案1】:

    也许那是错误的方法来做那个“魔术”。如果您只需要视图的全名字段,则可以按原样使用您的 getter。如果您需要保留它,您应该在其设置器中连接名字和姓氏字符串并设置全名属性。在这种情况下,您的 getter 应该返回该属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      相关资源
      最近更新 更多