Z góry dziękuję... patrz kod poniżej.. mam 2 modele, kategorię i produkt
Moja klasa modelu produktu Admin_Model_Product rozszerza Zend_Db_Table_Abstract {
protected $_name = 'products';
protected $_referenceMap = array(
'category' => array(
'columns' => array('category_id'),
'refTableClass' => 'Admin_Model_Category',
'refColumns' => array('id'),
'onDelete' => self::CASCADE,
'onUpdate' => self::RESTRICT
)
);
}
Mój model kategorii to:
class Admin_Model_Category extends Zend_Db_Table_Abstract {
protected $_name = 'categories';
protected $_dependentTables = array('Admin_Model_Product');
} w moim kontrolerze produktów mam
class Admin_ProductsController extends Zend_Controller_Action {
public function init() {
}
public function indexAction() {
echo '<pre>';
$model = new Admin_Model_Product();
}
}
To, co muszę zrobić, to pobrać wszystkie produkty za pomocą metody fetchAll() i pobrać wiersz nadrzędny każdego produktu i wyświetlić go w moim widoku... Mogę pobrać wszystkie produkty, ale nie wiem, jak znaleźć każdą kategorię nadrzędną produktów i powiązać je, czy jest jakiś przykładowy kod źródłowy? czy jakaś sugestia? potrzebuję tablicy zawierającej wszystkie produkty i nazwę kategorii nadrzędnej ..proszę o szybką.dzięki
2 odpowiedzi
Spróbuj następujących rzeczy:
Pobierz kategorie i ich produkty:
$model_category = new Admin_Model_Category();
$categorySet = $model_category->fetchAll();
$categories = $categorySet->toArray();
$i = 0;
$results = array();
foreach($categories as $category)
$categoryRow = $model_category->fetchRow('id =', $category->category_id)
$products = $categoryRow->findDependentRowset('Admin_Model_Product');
$results[$i]['parent'] = $category;
$results[$i]['products'] = $products;
$i++;
}
Następnie przekaż go do widoku:
$view->results = results;
Najlepszym sposobem na osiągnięcie tego byłoby wykonanie iteracji po wynikach produktów i utworzenie tablicy zawierającej wszystkie category_ids, a następnie wykonanie zapytania do modelu kategorii za pomocą where('category_id IN (?)', $array_of_categories_ids)
, a następnie utworzenie tablicy z zestawu wierszy kategorii za pomocą id_category => row_pairs
. Następnie możesz to zrobić w zaledwie dwóch zapytaniach :)
$categories_ids = array();
foreach ($products as $product)
{
$categories_ids[ $product->category_id ] = $product->category_id; // set key to category id to avoid duplicated category' ids
}
$categories = $categoryModel->fetchAll($categoryModel->select()->where('id_category in (?)', $categories_ids)); // here u have to add check on array 'coz if empty it will thoro Query exception
// now just iterate over categories
$categories = array();
foreach ($categories as $category)
{
$categories[ $category->id_category ] = $category;
}
// now when iterating over products u can just do $categories[ $product->category_id ] to get proper category for profuct
W każdym razie przepraszam za ewentualne literówki, napisałem to w locie ;)
Podobne pytania
Nowe pytania
zend-framework
Zend Framework to zorientowana obiektowo struktura aplikacji internetowych typu open source zaimplementowana w PHP 7.1 i licencjonowana na nowej licencji BSD. Zend Framework został zarchiwizowany 1 stycznia 2020 r. Równocześnie z migracją i uruchomieniem Laminas Project, oficjalnej kontynuacji pod nadzorem The Linux Foundation.