2016-10-05 2 views
2

Я пытаюсь сделать абстрактный класс для своих субъектов, связанных с общими полями, как created_at и updated_at значения:Абстрактный класс для Doctrine сущности

<?php 
namespace AppBundle; 

use Doctrine\ORM; 

abstract class Model { 

    /** 
    * @var \DateTime $created_at 
    * 
    * @ORM\Column(type="datetime") 
    */ 
    private $created_at; 

    /** 
    * @var \DateTime $updated_at 
    * 
    * @ORM\Column(type="datetime") 
    */ 
    private $updated_at; 

} 

Тогда я расширяю свой класс:

<?php 
namespace AppBundle\Entity; 

use AppBundle\Model; 

/** 
* Entity 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="RB\ProductsBundle\Entity\ProductRepository") 
*/ 
class Entity extends Model 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=true) 
    */ 
    private $name; 
} 

Проблема в том, что когда я делаю php app/console doctrine:schema:update --dump-sql, он не распознает поля Модели. Как я могу это изменить? Должен ли я использовать черту или что-то в этом роде?

EDIT: Я пытался добавить * @ORM\MappedSuperclass в верхней части моего абстрактного класса не повезло

Спасибо за ваше время :)

ответ

6

Проблема, скорее всего, в том, что ваши свойства в абстрактный родительский класс определяется как private. Измените их на protected, и он должен работать.

В качестве стороннего использования я использую черты для этой цели, а не наследования, поскольку классы сущностей могут использовать несколько признаков, но они могут расширять только один абстрактный класс.

+0

Это было! Спасибо :) – Hammerbot

+0

Идеальный намек на черты - я бы не рекомендовал расширение здесь ни один. – LBA

+0

Я также считаю, что этот признак может быть лучшим вариантом. Тем не менее, я пытаюсь сделать абстрактный класс для базовых функций, таких как параметры сериализации, функции временных меток и т. Д. Исходя из среды Laravel, это можно оценить. – Hammerbot

Смежные вопросы