Я пытаюсь создать две модели, products
и product_manufacturers
, чтобы я мог использовать производителей, а также продукты, редактировать их в админке, если необходимо, и обычные элементы CRUD. Вот схема для таблиц (она не завершена , поэтому, если у вас есть какие-либо предложения, продолжайте).
CREATE TABLE `product_manufacturers` (
`id` int(11) unsigned NOT NULL auto_increment,
`manufacturer_name` varchar(100) default NULL,
`active` tinyint(1) default '1',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
CREATE TABLE `products` (
`id` int(11) unsigned NOT NULL auto_increment,
`product_name` varchar(100) default NULL,
`manufacturer_id` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
Пример данных:
(продукты) -
id product_name manufacturer_id
1 iPod Nano 4g 1
(product_manufacturers) -
id manufacturer_name active
1 Apple 1
Я создал две модели, но у меня возникают проблемы с вытягиванием продуктов на основе активных производителей продуктов (и да, я использую автозагрузчик моделей).
protected function _initAutoload ()
{
// Add autoloader empty namespace
$autoLoader = Zend_Loader_Autoloader::getInstance();
$resourceLoader = new Zend_Loader_Autoloader_Resource(
array(
'basePath' => APPLICATION_PATH ,
'namespace' => '' ,
'resourceTypes' => array(
'form' => array('path' => 'forms/' ,
'namespace' => 'Form_') ,
'model' => array('path' => 'models/' ,
'namespace' => 'Model_')
)
));
// Return it so that it can be stored by the bootstrap
return $autoLoader;
}
применение / модели / product.php:
<?php
require_once 'Zend/Db/Table/Abstract.php';
class Model_Product extends Zend_Db_Table_Abstract
{
/**
* The default table name
*/
protected $_name = 'products';
protected $_dependentTables = array('Model_Manufacturer');
}
применение / модель / Manufacturer.php:
class Model_Manufacturer extends Zend_Db_Table_Abstract
{
/**
* The default table name
*/
protected $_name = 'product_manufacturers';
protected $_referenceMap = array(
'Model_Product' => array(
'manufacturer_id' => array('id'),
'id' => array('manufacturer_id'),
),
);
}
У меня такое ощущение, что я все делаю неправильно, поскольку я создаю объект из Модели продуктов и пытаюсь распечатать все продукты, у которых есть соответствующий производитель, и этот производитель активен.
$model = new Model_Product();
$results = $model->fetchAll();
foreach ($results as $result) {
//print_r($result);
echo $result->product_name;
}
Я новичок в создании моделей. Может ли кто-нибудь дать совет, как правильно изменить текущий код, чтобы модель продуктов должным образом зависела от модели производителей?
У меня такое ощущение, что я неправильно устанавливаю зависимую таблицу / эталонную карту, и вместо использования общего метода fetchAll
мне следует создать собственный метод в любой из моделей для выборки и, возможно, ручного соединения таблицу производителей, или правильное свойство referenceMap и variableTables решит эту проблему?