我在CakePHP3.5上有一个遗留的(不是按照蛋糕命名约定编写的)数据库。13申请。
其中一个数据库表名为article_95
。
当我尝试烘焙应用程序时,它将实体名称显示为Article95
。然后,它会产生大量错误消息,如:
Table 'article95' doesn't exist
所以我读了CakePHP错误:蛋糕烘焙使用了错误的表名和如何使用表名不同,然后在蛋糕PHP 3的数据库中,并决定手动使用setTable()
。
所以我创建了src/Model/Table/Article95Table。php
中包含以下代码:
namespace App\Model\Table;
use Cake\ORM\Table;
class Article95Table extends Table
{
public function initialize(array $config)
{
$this->setTable('article_95');
}
}
但它似乎无法证明这一点。在控制器中,我创建了一种测试方法,并执行了以下操作:
Cache::clear(false);
$Article95 = TableRegistry::get('Article95');
debug($Article95->find()->list());
但它提出了:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'article95' doesn't exist
就好像它没有读取setTable()方法。
我已经使用了缓存e::c李尔(假)来确保它没有被缓存,并检查了任何可疑文件的tmp/缓存
目录-那里没有相关的内容。
有什么想法吗?
同样,如果我将我的debug()
语句更改为debug($Article95)
,则会得到以下错误的表名:
object(Cake\ORM\Table) {
'registryAlias' => 'Article95',
'table' => 'article95',
'alias' => 'Article95',
'entityClass' => '\Cake\ORM\Entity',
'associations' => [],
'behaviors' => [],
'defaultConnection' => 'default',
'connectionName' => 'default'
}
顺便说一句,如果我在TableRegistry::get()
中放置了一个不存在的类/实体名称,例如TableRegistry::get('dsfddsfsd')代码>它不会产生错误消息,但会以不存在的表名显示上面的对象。这肯定也是错误的吗?
我已经设法让这个工作,所以想分享我的解决方案。
经过反复试验,似乎把“S”加在类名上(大概是说蛋糕是复数的吧?)作品
因此,我将表
类重命名为Article95sTable。php
,然后在内部使用以下代码:
class Article95sTable extends Table
{
public function initialize(array $config)
{
$this->setTable('article_95');
}
}
现在,当我调用以下命令时,它会正确地拾取表格:
$foo = TableRegistry::get('Article95s');
debug($foo);
如果我在setTable()
方法中重命名表,则输出将相应更改,以确认此操作是否有效。