В PHP + MySQL + PDO было бы намного медленнее
- Получить ID предмета по имени
- Получить данные по номеру
чем просто
- Получить данные элемента по имени
Последний - только один запрос, поэтому, очевидно, быстрее. Тем не менее, первый делает код более чистым (поскольку идентификатор элемента часто заранее известен), поэтому было бы лучше, если бы разница в производительности была достаточно мала.
Код, в котором я использую это:
открытая функция actionView () {
// read http request
...
// get item
$itemModel = new Rust_Model_Item();
try {
$id = $itemModel->getItemIdByUrlTitle($urltitle);
$item = $itemModel->getItem($id); // lots of data
} catch (Rust_Model_Item_NotFoundException $e) {
throw new FastMVC_Web_Error(404, 'Item not found');
}
...
}
http://code.heukelom.net/filedetails.php?repname=rust&path=%2Ftrunk%2Flib%2Fclasses%2FRust%2FController%2FItem.php
публичная функция getItem ($ id) {
$item = $this->getItemBasics($id);
$catModel = new Rust_Model_Category();
$item['category'] = $catModel->getById($item['category_id']);
$ratingModel = new Rust_Model_Rating();
$item['rating'] = $ratingModel->getForItem($id);
$pageModel = new Rust_Model_Page();
$item['pages'] = $pageModel->getListForItem($id);
$tagModel = new Rust_Model_Tag();
$item['tags'] = $tagModel->getForItem($id);
return $item;
}
http://code.heukelom.net/filedetails.php?repname=rust&path=%2Ftrunk%2Flib%2Fclasses%2FRust%2FModel%2FItem.php