【问题标题】:Symfony map inherited properties in ORM storage classORM存储类中的Symfony映射继承属性
【发布时间】:2017-05-29 16:55:21
【问题描述】:

我扩展了一个定义了一些属性的类。

我必须将继承的属性存储在我的数据库中以映射结果实体。

这个的语法是什么样子的?

我扩展了 Payum 支付模型类“PaymentDetails”,它本身正在扩展类“Payment”,如下所示:

/**
 * Class Payment
 *
 * Lets you create, process and manage payments.
 *
 * @package PayPal\Api
 *
 * @property string id
 * @property string intent
 * @property \PayPal\Api\Payer payer
 * @property \PayPal\Api\Transaction[] transactions
 * @property string state
 * @property string experience_profile_id
 * @property string note_to_payer
 * @property \PayPal\Api\Payee $payee
 * @property \PayPal\Api\RedirectUrls redirect_urls
 * @property string failure_reason
 * @property string create_time
 * @property string update_time
 * @property \PayPal\Api\Links[] links
 */
class Payment extends PayPalResourceModel
{
    // ...
}

“PaymentDetails”类是:

use PayPal\Api\Payment as BasePaymentDetails;

class PaymentDetails extends BasePaymentDetails
{
    protected $idStorage;
}

我自己的班级看起来像这样的atm:

/**
 * @ORM\Table
 * @ORM\Entity
 */
class PaymentPaypalPlus extends PaymentDetails
{
    /**
     * @ORM\Column(name="idPpp", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     *
     * @var integer $idPpp;
     */
    protected $id;
}

我需要以某种方式使“PaymentPaypalPlus”类作为 Payum 的有效存储类工作,这意味着我必须将属性从基类映射到 DB(使用 ORM)。至少这是我认为我应该做的。如果这没有意义,请告诉我:-)

【问题讨论】:

    标签: php symfony orm doctrine payum


    【解决方案1】:

    它认为您正在寻找的最接近的东西是 php-mappingyaml-mapping

    如果属性受到保护,您还可以在带有注释的子类中重新定义它们 - 但是这会破坏继承的目的,除非有许多函数/等也可以保持原样。

    doctrine inheritance-mapping 甚至PHP Traits 这样的实际继承也可以,但是您必须修改您的供应商类。

    【讨论】:

    • 谢谢!这看起来很有希望。我正在尝试采用 php-mapping 方式。但是 - 通常我会调用 doctrine:schema:update --force 来更新我的数据库结构。当我使用StaticPHPDriver 时,我该怎么做?你能谈谈方法本身吗?将这些属性映射为使用基类作为存储类是否有意义?或者基类存在的预期原因是什么? @Jenne van der Meer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多