提问者:小点点

setTable在CakePHP 3中的旧数据库中无法正常工作。十、


我在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')它不会产生错误消息,但会以不存在的表名显示上面的对象。这肯定也是错误的吗?


共1个答案

匿名用户

我已经设法让这个工作,所以想分享我的解决方案。

经过反复试验,似乎把“S”加在类名上(大概是说蛋糕是复数的吧?)作品

因此,我将类重命名为Article95sTable。php,然后在内部使用以下代码:

class Article95sTable extends Table
{

    public function initialize(array $config)
    {
        $this->setTable('article_95'); 
    }
}

现在,当我调用以下命令时,它会正确地拾取表格:

$foo = TableRegistry::get('Article95s');
debug($foo);

如果我在setTable()方法中重命名表,则输出将相应更改,以确认此操作是否有效。