使用Silverstripe ORM在单个列上选择DISTINCT

使用Silverstripe ORM在单个列上选择DISTINCT,silverstripe,Silverstripe,我的桌子: ----------------------------------------- | ID | RoomTypeId | ChargeTypeId | Name | ----------------------------------------- | 1 | 23 | 32 | DD | | 2 | 26 | 32 | DD | | 3 | 28 | 31 |

我的桌子:

-----------------------------------------
| ID | RoomTypeId | ChargeTypeId | Name |
-----------------------------------------
|  1 |    23      |    32        |  DD  |
|  2 |    26      |    32        |  DD  |
|  3 |    28      |    31        |  CC  |
-----------------------------------------
ORM在默认情况下已经是不同的,但在每一列上都是不同的,并返回所有3个

我需要的回报:

-----------------------
| ChargeTypeId | Name |
-----------------------
|      32      |  DD  |
|      31      |  CC  |
-----------------------
希望实际上有一种实现方法来实现这一点,而无需
DB::query()

我发现
toMap()
将根据您选择的列创建一个独特的查询

示例

$result = \ChargeTypes::get()->toMap("ChargeTypeId", "Name")
array(2) {
    [32]=>
  string(2) "DD"
    [6]=>
  string(2) "CC"
}
$result->toArray()

$result = \ChargeTypes::get()->toMap("ChargeTypeId", "Name")
array(2) {
    [32]=>
  string(2) "DD"
    [6]=>
  string(2) "CC"
}
更新我不认为这实际上创建了一个独特的查询,它只是在我的案例中起作用,下面将详细说明原因

$myArray = array();
$myArray[32] = "DD";
$myArray[32] = "DD";
$myArray[32] = "DD";
$myArray[6] = "CC";
$myArray[6] = "CC";
var_dump($myArray);
结果:

array(2) {
    [32]=>
  string(2) "DD"
    [6]=>
  string(2) "CC"
}
因此,从理论上讲,只要您的第一个键是唯一的,这实际上并不是一个糟糕的解决方案,尽管存在冗余迭代。

我发现
toMap()
将根据您选择的列创建一个独特的查询

示例

$result = \ChargeTypes::get()->toMap("ChargeTypeId", "Name")
array(2) {
    [32]=>
  string(2) "DD"
    [6]=>
  string(2) "CC"
}
$result->toArray()

$result = \ChargeTypes::get()->toMap("ChargeTypeId", "Name")
array(2) {
    [32]=>
  string(2) "DD"
    [6]=>
  string(2) "CC"
}
更新我不认为这实际上创建了一个独特的查询,它只是在我的案例中起作用,下面将详细说明原因

$myArray = array();
$myArray[32] = "DD";
$myArray[32] = "DD";
$myArray[32] = "DD";
$myArray[6] = "CC";
$myArray[6] = "CC";
var_dump($myArray);
结果:

array(2) {
    [32]=>
  string(2) "DD"
    [6]=>
  string(2) "CC"
}

因此,从理论上讲,只要您的第一个键是唯一的,这实际上并不是一个糟糕的解决方案,尽管有冗余的迭代。

我以前没有使用过这些方法,但我会看一看,感谢@GavinBruce,我将研究这些方法,因为现在我在
toMap()中找到了我的解决方案
我以前没有使用过这些方法,但我会看一看并感谢@GavinBruce,我会研究这些方法,因为现在我在
toMap()中找到了我的解决方案。