从我收集的内容来看,Symfony 2/Doctrine使用数据库定义(在我的情况下是外键约束)来映射实体之间的关系。我特别希望能够从两面关联两张表,但我不想在每张表中创建多余的外键。在这种情况下,我有一个Account
表和一个Transaction
表。从Table到外部表的OneToMany映射[Symfony 2/Doctrine]
帐户表
CREATE TABLE "account" (
"account_id" BIGSERIAL NOT NULL,
"name" VARCHAR (100) NOT NULL,
"date_created" TIMESTAMP (6) WITH TIME ZONE NOT NULL,
"date_modified" TIMESTAMP (6) WITH TIME ZONE,
CONSTRAINT "pk-account-account_id"
PRIMARY KEY ("account_id"),
);
事务表
CREATE TABLE "transaction" (
"transaction_id" BIGSERIAL NOT NULL,
"account_id" BIGINT NOT NULL,
"amount" MONEY NOT NULL,
"date_created" TIMESTAMP (6) WITH TIME ZONE NOT NULL,
"date_modified" TIMESTAMP (6) WITH TIME ZONE,
CONSTRAINT "pk-transaction-transaction_id"
PRIMARY KEY ("transaction_id"),
CONSTRAINT "fk-transaction-account_id-account-account_id"
FOREIGN KEY ("account_id")
REFERENCES "account" ("account_id")
ON DELETE RESTRICT
ON UPDATE CASCADE,
);
当我生成使用php bin/console doctrine:generate:entities
实体我看到交易实体有一个$帐户属性,但我的帐户实体中没有$事务实体。我假设这是因为我没有在我的账户表中定义外键约束。
在我的代码,我用以下命令来创建我的帐户对象:
$accounts = $this->getDoctrine()
->getRepository('BalancesBundle:Account')
->findAll();
然后我会想迭代这个数组以获取每个账户总余额。从长远来看,我想在我的账户实体中创建一个帮助方法,该方法将调用getTransactions()
将所有交易累计为一个总计。
这可能吗?我觉得我错过了一些东西,而我唯一的追求就是从交易实体内部做到这一点。如果可能的话,我想避免从交易实体那里做这件事。
刚一说明:学说不使用DB映射关系。它使用映射。另外'教条:生成:实体'不会从数据库生成实体,而是从映射生成实体,所以我假设您已经先创建了它们。既然你从sql表开始,我假设你使用了'doctrine:mapping:import'命令。如果你想有双向关系,你应该修改你的映射,而不是数据库。其实你应该使用映射而不是数据库。 –
你是对的,我先创建了表格,然后使用了导入。当时我不知道Doctrine可以为我生成必要的SQL。我可能会从这里出去。谢谢你的头。 – dohpaz42