根据我收集的内容,Symfony 2 / Doctrine使用数据库定义(在我的情况下使用外键约束)来映射实体之间的关系。我有两个表,我希望能够从双方关联,但我不想在每个表中创建冗余的外键。在这种情况下,我有一个Account
表和一个Transaction
表。
帐户表
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
生成实体时,我看到交易实体具有$ account属性,但我的帐户实体没有$ transaction实体。我假设这是因为我没有在我的帐户表中定义外键约束。
在我的代码中,我通过以下方式创建帐户对象:
$accounts = $this->getDoctrine()
->getRepository('BalancesBundle:Account')
->findAll();
然后我想迭代数组以获得每个帐户的总余额。从长远来看,我想在我的帐户实体中创建一个帮助方法,该方法会调用getTransactions()
将所有交易合计为一个总和。
这可能吗?我觉得我错过了一些东西,而我唯一的办法是在交易实体内做这件事。如果可能的话,我想避免从交易实体这样做。
答案 0 :(得分:1)
从我得到的,您无法获得帐户实体的交易实体。奇怪的是,你没有"交易"您的ccount实体内的财产,我是对的吗?看起来像一个糟糕的映射。
看一下Doctrine documentation,你必须定义你的" transcations"您"帐户内的财产"实体并将其映射到OneToMany关联。
然后你可以使用" php bin / console do:ge:entities AppBundle:Account"
答案 1 :(得分:0)
如果您的实体设置正确,那么您应该可以从帐户访问交易。
["categories": ["a/b/c", "d"]]