在mysql symfony中左键连接时如何确定排序字段?

在mysql symfony中左键连接时如何确定排序字段?,mysql,symfony,Mysql,Symfony,我正在使用symfony和restapi。我得到一个用户列表,他们的交易包括:ID、电子邮件、名字、姓氏、方法、金额。所以我的问题是: SELECT u.id, u.email, ud.first_name, ud.last_name, t.method, t.amount FROM user u LEFT JOIN user_detail ud ON u.id = ud.user_id LEFT JOIN transactions t ON u.id = t.user_id 在symfony

我正在使用symfony和restapi。我得到一个用户列表,他们的交易包括:ID、电子邮件、名字、姓氏、方法、金额。所以我的问题是:

SELECT u.id, u.email, ud.first_name, ud.last_name, t.method, t.amount
FROM user u
LEFT JOIN user_detail ud ON u.id = ud.user_id
LEFT JOIN transactions t ON u.id = t.user_id
在symfony中,我使用条令查询生成器ORM:

$qb = $this->userRepository->createQueryBuilder('u');
$qb->select('u.id, u.email, ud.firstName, ud.lastName, t.method, t.amount')
   ->leftJoin('u.userDetail', 'ud')
   ->leftJoin('u.transactions','t');
我想对列表中的任何列进行排序。所以我的想法是在url中传递查询字符串,比如:
/users list?sortField=email&sortDirection=DESC
我将处理:

if(isset($request->query->get('sortField')) && isset($request->query->get('sortDirection'))){
   $sortField = $request->query->get('sortField');
   $sortDirection = $request->query->get('sortDirection'));
   $qb->orderBy('u.' . $sortField, $sortDirection);
}
但如果sortField是“firstName”,“lastName”,那么别名必须是
“ud”$sortField
,如果sortField是“方法”,“金额”,则别名必须是
“t.”$sortField

我怎么处理所有的案子?我的想法是使用if-else或switch-case,但假设左连接多个表或多个列,这相当冗长。

您提供的示例很容易受到sql注入攻击。因为用户通过查询参数直接操作查询

我建议你去拿开关箱。它确实更冗长,但更安全,更可读

您可以通过使用

if($sortField=$request->get('sortField'){switch(sortField){…