Cakephp和具有uncomon结构的数据库

时间:2012-01-22 13:55:16

标签: php mysql sql cakephp

如何在模型中访问数据库中的任何表?

例如,我内部有Index个控制器和代码:

$results = $this->Index->query("SELECT COUNT(*) FROM my_own_table");


Error: Database table indices for model Index was not found.

因此,据我所知,我只能访问与模型/控制器名称相关的命名表。但是,如果我不能修改表命名并且我想访问它的数据该怎么办?

2 个答案:

答案 0 :(得分:1)

您不仅限于使用与您的控制器直接关联的模型(这只是默认行为);你可以使用任何模型。

要实现您的目标,请为此表创建一个新模型,例如。 MyOwnTable,并且在您的控制器中,您可以将此属性添加到类:

public $uses = array('Index', 'MyOwnTable');

现在,您可以使用CakePHP内置的ActiveRecord功能访问MyOwnTable

$results = $this->MyOwnTable->find('count');

如果您要访问其他表,只需为这些表创建模型并将其添加到$uses属性。 (如果您愿意,也可以在操作中使用$this->loadModel('Model')。)

如果您的表名不具有可读性(例如。my_tb_own_1_x或某些此类),您可以将模型类称为人类可读的(例如。MyTable),并且将$useTable属性添加到模型中:

public $useTable = 'my_tb_own_1_x';
/* and change the default primary key if you have an unusual one */
public $primaryKey = 'my_tb_own_1_x_idx_pk';

有关如何更改默认模型和控制器行为的详细信息,请参阅CakePHP手册:

1.3 - Model Attributes

2.0 - Model Attributes

1.3 - Controller Attributes

2.0 - Controller Attributes

答案 1 :(得分:0)

不。您可以访问不同的表。但是,CakePHP偶然发现默认情况下与索引模型关联的表不存在。

换句话说,模型Index期望存在一个表'indices'(如果没有则抛出错误)。你可以做以下两件事之一:

  1. 创建表索引
  2. 将以下内容添加到索引模型中:var $useTable = false;
  3. 如果您对索引表有任何用处,我会使用选项1.如果您不打算使用索引表,请选择选项2.

    如果您选择步骤1或2,您的示例应该开始工作。