在CakePHP的find('all')方法中使用'id'设置索引

时间:2011-04-19 08:54:21

标签: php cakephp multidimensional-array

我有一个包含数据的数组,所有数据都有自己唯一的ID。我正在使用ORM方法find('all'),结果数组看起来有点像这样:

Array
(
    [0] => Array
        (
            [Wijken] => Array
                (
                    [id] => 1
                    [name] => Naam
                    [lat] => 13.37
                    [lon] => 13.37
                    [zoom] => 14
                )

        )

)

从我的路由我收到一个唯一的ID .. 我想要的是重新使用我的数组并从ID 1中获取数据。

所以我需要的是我的关联数组的索引(由find('')返回)被设置为“Wijken” - 对象本身的id。

我解释了一切,以防人们有不同的方法。但是,使用param ID再次查询数据库是不可接受的。

2 个答案:

答案 0 :(得分:15)

尝试Set::combine

维护find('all')结构(来自icc97注释):

$idsAsIndexes = Set::combine($wijkens, '{n}.Wijken.id', '{n}');

或者您也可以提取单个模型:

$idsAsIndexes = Set::combine($wijkens, '{n}.Wijken.id', '{n}.Wijken');

希望这就是你要找的东西:)

答案 1 :(得分:1)

我不知道如何将你的id作为数组中的一个键,甚至不认为使用Cake可以做一些“搞笑”的事情。

但是如果你做了一个全部查找,我必须假设你要处理数据并在某个时刻做一个循环,那时你可能有类似的东西:

foreach ($wijkens as $wijken) {
    [...]do the general things here[...]
    if ($wijken['Wijken']['id'] == $url_id) {
        [...]do the thing you want to specifically do to id = 1 here[...]
    }
}

另一方面,我知道你不需要任何额外的查询,虽然这对我来说似乎是一个相对较小的交易成本,而且仍然是我想要的。