2013-09-09 4 views
3

Я пытаюсь использовать наследование классов класса в ZF2 и Doctrine 2. Моя реализация довольно проста. Я думаю, что у меня есть все структуры классов, но я думаю, что может быть проблема с некоторой настройкой где-то. К сожалению, я нашел много документации по настройке класса, но не много в реализации YML. Кажется, что все прибегают к использованию инструментов доктрины для генерации всего. С тем, как все настроено, использование инструментов доктрины является немного проблематичным, особенно при использовании ZF2. Кроме того, я считаю, что это возможность обучения. Итак, вот что у меня есть:Doctrine 2 Наследование классов классов YML

Текущая проблема: Я не получаю какие-либо данные из класса ребенка/таблицы:

.array(1) { 
[0] => 
class MyCompany\Domain\Model\Customer\CustomerNote#2852 (9) { 
    protected $customer => 
    NULL 
    protected $note => 
    string(13) "Clever Note 1" 
    protected $id => 
    string(1) "1" 
    protected $disabled => 
    NULL 
    protected $modified => 
    class DateTime#2884 (3) { 

    ... 

родового Примечания Класс/Стол:

CREATE TABLE generic_notes 
(
    note_id serial NOT NULL, 
    discriminator character varying(255) NOT NULL, 
    note text, 
    created timestamp with time zone NOT NULL DEFAULT now(), 
    created_by_id bigint NOT NULL, 
    modified timestamp with time zone, 
    modified_by_id bigint, 
    disabled timestamp with time zone NOT NULL DEFAULT 'infinity'::timestamp with time zone, 
    CONSTRAINT generic_notes_pkey PRIMARY KEY (note_id), 
    CONSTRAINT generic_notes_created_by_id_fkey FOREIGN KEY (created_by_id) 
     REFERENCES users (user_id) MATCH SIMPLE 
     ON UPDATE CASCADE 
     ON DELETE RESTRICT, 
    CONSTRAINT generic_notes_modified_by_id_fkey FOREIGN KEY (modified_by_id) 
     REFERENCES users (user_id) MATCH SIMPLE 
     ON UPDATE CASCADE 
     ON DELETE RESTRICT 
) 

клиента Notes класса/таблицы (наследуемые Общие примечания):

CREATE TABLE customer_notes 
(
    note_id bigint NOT NULL, 
    customer_id bigint NOT NULL, 
    CONSTRAINT customer_notes_pkey PRIMARY KEY (note_id), 
    CONSTRAINT customer_notes_note_id_fkey FOREIGN KEY (note_id) 
     REFERENCES generic_notes (note_id) MATCH SIMPLE 
     ON UPDATE RESTRICT 
     ON DELETE RESTRICT, 
    CONSTRAINT customer_notes_customer_id_fkey FOREIGN KEY (customer_id) 
     REFERENCES customers (customer_id) MATCH SIMPLE 
     ON UPDATE R1ESTRICT 
     ON DELETE RESTRICT 
) 

YML Mapping для Примечания:

MyCompany\Domain\Model\Note: 
    type: entity 
    table: generic_notes 
    inheritanceType: JOINED 
    discriminatorColumn: 
    name: discriminator 
    type: string 
    length: 255 
    discriminatorMap: 
    customer: MyCompany\Domain\Model\Customer\CustomerNote 
    id: 
    id: 
     column: note_id 
     type: bigint 
     generator: 
     strategy: IDENTITY 
    fields: 
    note: 
     type: text 
     nullable: true 
    created: 
     type: datetimetz 
    modified: 
     type: datetimetz 
     nullable: true 
    disabled: 
     type: datetimetz 
     nullable: true 
    manyToOne: 
    createdBy: 
     targetEntity: MyCompany\Domain\Model\User 
     joinColumn: 
     name: created_by_id 
     referencedColumnName: user_id 
    modifiedBy: 
     targetEntity: MyCompany\Domain\Model\User 
     joinColumn: 
     name: modified_by_id 
     referencedColumnName: user_id 

Примечание клиента Mapping:

MyCompany\Domain\Model\Customer\CustomerNote: 
    type: entity 
    table: customer_notes 
    manyToOne: 
    customer: 
     targetEntity: MyCompany\Domain\Model\Customer 
     inversedBy: customerNote 
     joinColumn: 
     name: customer_id 
     referencedColumnName: customer_id 

Generic Примечание Entity

<?php 

namespace MyCompany\Domain\Model; 

use MyCompany\Domain\Model\Entity\AbstractEntity; 
use MyCompany\Domain\Model\Entity\DisabledTrait; 
use MyCompany\Domain\Model\Entity\TimestampedInterface; 
use MyCompany\Domain\Model\Entity\TimestampedTrait; 

/** 
* Class Note 
* 
* @package MyCompany\Domain\Model 
*/ 

class Note extends AbstractEntity implements TimestampedInterface 
{ 
    use DisabledTrait; 
    use TimestampedTrait; 

    /** 
    * @var string 
    */ 
    protected $note; 

    /** 
    * @param string $note 
    * @return $this 
    */ 
    public function setNote($note) 
    { 
     $this->note = $note; 
     return $this; 
    } 

    /** 
    * @return string 
    */ 
    public function getNote() 
    { 
     return $this->note; 
    } 
} 

Примечание клиента Entity:

<?php 

namespace MyCompany\Domain\Model\Customer; 

use MyCompany\Domain\Model\Note; 
use MyCompany\Domain\Model\Customer; 

/** 
* Class CustomerNote 
* @package MyCompany\Domain\Model\Customer 
*/ 
class CustomerNote extends Note 
{ 
    /** 
    * @var \MyCompany\Domain\Model\Customer 
    */ 
    protected $customer; 

    /** 
    * @param \MyCompany\Domain\Model\Customer $customer 
    * @return $this 
    */ 
    public function setCustomer(Customer $customer) 
    { 
     $this->customer = $customer; 
     return $this; 
    } 

    /** 
    * @return \MyCompany\Domain\Model\Customer 
    */ 
    public function getCustomer() 
    { 
     return $this->customer; 
    } 
} 

Generic Примечание Крепеж данных:

generic_notes: 
    - 
    note_id: 1 
    discriminator: customer 
    note: Clever Note 1 
    created: "2012-01-23 05:43:21.000000" 
    created_by_id: 1 
    modified: "2012-01-24 05:43:21.000000" 
    modified_by_id: 2 
    disabled: null 

Клиент Примечания Крепеж данные:

customer_notes: 
    - 
    note_id: 1 
    customer_id: 1 

ответ

4

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