Zendframework Rowset выбирается ключом - PullRequest
1 голос
/ 16 октября 2011

Я пытаюсь получить доступ к строкам вызова fetchAll (возвращает Zend_Db_Table_Rowset_Abstract) по первичному ключу строки.

Мне было интересно, что будет самым простым способом сделать это, кроме циклического прохождения и поиска нужной строки.

Ответы [ 2 ]

1 голос
/ 16 октября 2011

Используйте '$ db-> find ($ id) -> current ();'

Надеюсь, это поможет.

1 голос
/ 16 октября 2011

Если я правильно помню, Zend_Db_Table_Rowset_Abstract просто передается массив (или что-то, что действует как единое целое), а затем, когда вы проходите через него, он создает Zend_Db_Table_Row_Abstract объекты.

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

Обновление : Просто взглянул на источник, вот данные, которые (в конечном итоге) передаются объекту набора строк:

$stmt = $this->_db->query($select);
$data = $stmt->fetchAll(Zend_Db::FETCH_ASSOC);
return $data;

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

Таким образом, вы должны сделать что-то подобное, чтобы отобразить строки в первичный ключ (некоторое время я не использовал Zend_Db_*, обработайте этот псевдокод):

$rows = array();
foreach($rowset as $row){
  //you could pull the primary key from Zend_Db_Table
  $rows[$row->id] = $row;
}

//now you can lookup by primary key
$rows[55]->name;

Конечно, вы можете расширить класс абстрактного набора строк и сделать это внутренне, если хотите.

...