如何在模型中访问数据库中的任何表?
例如,我内部有Index
个控制器和代码:
$results = $this->Index->query("SELECT COUNT(*) FROM my_own_table");
Error: Database table indices for model Index was not found.
因此,据我所知,我只能访问与模型/控制器名称相关的命名表。但是,如果我不能修改表命名并且我想访问它的数据该怎么办?
答案 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 :(得分:0)
不。您可以访问不同的表。但是,CakePHP偶然发现默认情况下与索引模型关联的表不存在。
换句话说,模型Index期望存在一个表'indices'(如果没有则抛出错误)。你可以做以下两件事之一:
var $useTable = false;
如果您对索引表有任何用处,我会使用选项1.如果您不打算使用索引表,请选择选项2.
如果您选择步骤1或2,您的示例应该开始工作。