执行DQL查询时,例如:
SELECT u AS user, t AS transaction
FROM Model\User u
JOIN Model\Transaction t WITH t.user = u
您会获得交替的结果行,例如:
['user' => Model\User(1)]
['transaction' => Model\Transaction(1)]
['transaction' => Model\Transaction(2)]
['user' => Model\User(2)]
['transaction' => Model\Transaction(3)]
['transaction' => Model\Transaction(4)]
['transaction' => Model\Transaction(5)]
是否可以通过SQL方式获得结果,例如:
['user' => Model\User(1), 'transaction' => Model\Transaction(1)]
['user' => Model\User(1), 'transaction' => Model\Transaction(2)]
['user' => Model\User(2), 'transaction' => Model\Transaction(3)]
['user' => Model\User(2), 'transaction' => Model\Transaction(4)]
['user' => Model\User(2), 'transaction' => Model\Transaction(5)]
处理比交替对象要容易得多。
答案 0 :(得分:1)
不幸的是,目前没有简单方式实现这一目标。但是,有一种方法可以获得结果。
创建一个名为UserTransactionDTO的类并接受2个构造函数参数:User和Transaction。
现在重写您的DQL查询,如下所示:
SELECT NEW UserTransactionDTO(user, transaction)
FROM Model\User u
JOIN Model\Transaction t WITH t.user = u
这应该为您提供符合您所需行为的结果(UserTransactionDTO对象列表),允许您在单个记录上访问用户和事务。
答案 1 :(得分:1)
我现在的做法是:
create table questions (
q_id int not null auto_increment
, question varchar(100) not null
, primary key (q_id)
);
create table answers (
a_id int not null auto_increment
, answer varchar(100) not null
, q_id int not null
, primary key (a_id)
, foreign key (q_id) references questions(q_id)
);
哪个足够干净。
请注意,这个示例很糟糕,因为您只能返回Transactions并从那里获取用户;但是我经常遇到单个对象不能保存所有信息的用例。