在config.php中,我提出了类似的内容:
$config['dsn']='mysql://user:password@localhost/project';
我猜最后一个参数'project'定义了mysql中的数据库名称。所以我创建了一个名为'project'的数据库,在mysql中使用表名'product',并在我的模型中添加相同的名称
class Model_Product extends Model_Table {
public $entity_code='product';
}
我在我的本地环境中测试没有任何问题。但是当我将文件上传到服务器时,它会返回错误,指出无法连接到表'project.Product'。 (唯一的区别是'产品'的第一个字母已被大写)。因此,代码似乎与模型名称“Product”一致,而不是模型代码中定义的表名。
我不知道为什么会这样,但我认为唯一的区别是mysql的版本(本地5.5和服务器端5.1)。除了升级服务器端mysql之外还有其他解决方案吗?否则,我必须手动将型号名称更改为class Model_product extends Model_Table
并搜索&更换
无处不在setModel('Product')
到setModel('product')
。
答案 0 :(得分:0)
您似乎使用的是setSource('Product')而不是setModel('Product')。
在添加模型之前,函数setSource已经在3.0版本的Agile Toolkit中。它允许网格直接与数据库一起操作。 setSource的第一个参数指定表名,因此“Product”用作表名。
在本地计算机上运行的是Windows,不区分大小写。即使您从“产品”中选择,它也会从“产品”中获取数据。但是,在您的服务器上,您使用的是Linux,并且从“产品”中选择无法找到具有此类名称的表。
这是因为MySQL正在使用文件来存储MyISAM的表。
您的修复是使用setModel(),并且在4.2严重重构时不要使用setSource。
答案 1 :(得分:0)
是的,你可以只使用MVCForm中的一些字段和setModel,你也可以添加提示之类的东西,它将是这样的:
$g=$this->add('MVCForm');
$g->setModel('Student',array('name','level','classroom'));
$g->getElement('name')
->setFieldHint('Full name');