[英]Doctrine 2 Class Table Inheritance YML
I'm trying to use Class Table Inheritance within ZF2 and Doctrine 2. My implementation is pretty simple. 我正在尝试在ZF2和Doctrine 2中使用类表继承。我的实现非常简单。 I think I have the class structure all set, but I think there might be a problem with some setup somewhere.
我认为我已经设置了所有类结构,但我认为某些设置可能存在问题。 Unfortunately, I have found a lot of documentation on the Class setup, but not a whole lot on the YML implementation.
不幸的是,我在类设置上找到了很多文档,但在YML实现上并没有很多。 Everyone seems to resort to using the doctrine tools to generate everything.
每个人似乎都倾向于使用学说工具来生成一切。 With how things are set up, using the doctrine tools is a little problematic, especially when using ZF2.
根据事物的设置方式,使用学说工具有点问题,特别是在使用ZF2时。 Also, I consider this to be a learning opportunity.
此外,我认为这是一个学习机会。 So, here is what I have:
所以,这就是我所拥有的:
The Current Problem: I'm not getting any of the data from the child class/table: 当前问题:我没有从子类/表中获取任何数据:
.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) {
...
The Generic Notes Class/Table: 通用Notes类/表:
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
)
The Customer Notes Class/Table (Inherits Generic 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 for Note: 注意YML映射:
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
Customer Note 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 Note 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;
}
}
Customer 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 Note Fixture Data: 通用注意夹具数据:
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 Fixture Data: 客户备注夹具数据:
customer_notes:
-
note_id: 1
customer_id: 1
Everything above is perfectly valid and working. 以上所有内容都非常有效且有效。 It appears that I wasn't including my notes fixture data for the customer notes unit test, and vice-versa.
似乎我没有为客户备注单元测试包括我的笔记夹具数据,反之亦然。 So, a number of days down the hole for my own stupidity.
所以,为了我自己的愚蠢,这几天下来了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.