0

我正在为联系人管理创建一个类,我很好奇是否有人有任何创意可以传递选项以使某些列ORDER BY在 MySQL 中可排序。

有 5 列。ID、名字、姓氏、电话号码、电子邮件。

所有这些都需要是可排序的升序和降序。显而易见的答案就是传递一个字符串,例如“firstname DESC”——但似乎有点打开,并且想让类更具限制性。

有任何想法吗?

4

1 回答 1

1

最安全的方法是使用只能保存某些值的对象:

function getUser(UserSortOption $sortOrder) {
    ...
    $sql .= $sortOrder->getField() . $sortOrder->getDirection();
    ...
}

getUser(new UserSortOption(UserSortOption::FIRSTNAME, UserSortOption::DESC));

为您提供严格类型和枚举的所有优势。尽管必须为每个函数参数定义、测试和包含一个单独的类,但这可能有点过头了。

否则,您必须检查函数内部:

function getUser(array $sort) {
    $sortField = key($sort);
    $sortDirection = current($sort);

    if (!in_array($sortField, array('Firstname', ...))) {
        throw new InvalidArgumentException("Invalid value $sortField for sort parameter");
    }

    ...
}

getUser(array('Firstname' => 'desc'));
于 2012-10-05T03:03:59.250 回答