【发布时间】:2009-12-16 02:32:58
【问题描述】:
我正在尝试创建两个模型,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
(产品制造商)-
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'),
),
);
}
我感觉自己完全做错了,因为我正在从 Products Model 创建一个对象并尝试打印出所有具有相应制造商并且该制造商处于活动状态的产品。
$model = new Model_Product();
$results = $model->fetchAll();
foreach ($results as $result) {
//print_r($result);
echo $result->product_name;
}
我是模型创建的新手,谁能提供有关如何正确更改当前代码以使产品模型正确依赖制造商模型的建议?
我有一种感觉,我不正确地设置了dependentTables/referenceMap,而不是使用通用的fetchAll 方法,我应该在任何一个模型中创建一个自定义方法来进行获取,也许是手动加入制造商表,还是适当的 referenceMap 和dependentTables 属性可以解决这个问题?
【问题讨论】:
标签: php mysql zend-framework