Установка индекса с помощью 'id' в методе find ('all') CakePHP - PullRequest
6 голосов
/ 19 апреля 2011

У меня есть массив с данными, каждый со своим уникальным идентификатором.Я использую метод ORM find ('all'), и результирующий массив выглядит примерно так:

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

        )

)

Из моей маршрутизации я получаю уникальный идентификатор. То, что я хочу, это повторноеиспользуйте мой массив и получите данные, скажем, с ID 1.

Так что мне нужно, чтобы индексы моего ассоциативного массива (возвращаемого функцией find ('')) устанавливались с идентификатором«Вейкен» - сам объект.

Я все объяснил, на случай, если у людей другой подход.Повторный запрос базы данных с идентификатором параметра недопустим.

Ответы [ 2 ]

15 голосов
/ 19 апреля 2011

try Set :: Объединить

Для сохранения структуры find ('all') (из комментария icc97):

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

В качестве альтернативы вы также можете извлечьодиночная модель:

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

надеюсь, это то, что вы ищете:)

1 голос
/ 19 апреля 2011

Я не знаю способа, чтобы ваш идентификатор был ключом в массиве, и даже не думаю, что это возможно с 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[...]
    }
}

С другой стороны, я понимаю, что вы не хотите никаких дополнительных запросов, хотя мне кажется, что это сравнительно небольшая транзакционная стоимость, и я все еще предпочитаю.

...