2013-07-16 42 views
0

刚刚开始使用Cake PHP。我正在关注官方网站上提供的这本书。 对于第一个博客示例,我确实创建了控制器,模型和视图,即PostsController.php,Post.phpindex.ctpcakephp:缺少数据库表博客示例

LearnCake \程序\控制器\ PostsController.php

<?php 

class PostsController extends AppController{ 
    public $helpers = array('Html', 'Form'); 

    public function index(){ 
     $this->set('posts', $this->Post->find('all')); 
    } 
} 
?> 

LearnCake \程序\查看\文章\ index.ctp

<h1>Blog posts</h1> 
<table> 
<tr> 
<th>Id</th> 
<th>Title</th> 
<th>Created</th> 
</tr> 
<!-- Here is where we loop through our $posts array, printing out post info --> 
<?php foreach ($posts as $post): ?> 
<tr> 
<td><?php echo $post[’Post’][’id’]; ?></td> 
<td> 
<?php echo $this->Html->link($post[’Post’][’title’], 
array(’controller’ => ’posts’, ’action’ => ’view’, $post[’Post’][’id’])); ?> 
</td> 
<td><?php echo $post[’Post’][’created’]; ?></td> 
</tr> 
<?php endforeach; ?> 
<?php unset($post); ?> 
</table> 

中给出的模型留空示例:

LearnCake \ app \ Model \ Post.php 类柱延伸AppModel { }

我试着用这个URL http://localhost/LearnCake/posts/index访问的页面,但我得到的错误:

Missing Database Table 

Error: Table p_o_s_ts for model Post was not found in datasource default. 

至于例子,我没有创建一个表名为posts。我不知道为什么它搜索名为p_o_s_t的表格。

我的连接文件是:

<?php 

class DATABASE_CONFIG { 

    public $default = array(
     'datasource' => 'Database/Mysql', 
     'persistent' => false, 
     'host' => 'localhost', 
     'login' => 'root', 
     'password' => 'password', 
     'database' => 'cakephp', 
     'prefix' => '', 
     //'encoding' => 'utf8', 
    ); 

    public $test = array(
     'datasource' => 'Database/Mysql', 
     'persistent' => false, 
     'host' => 'localhost', 
     'login' => 'root', 
     'password' => 'password', 
     'database' => 'cakephp', 
     'prefix' => '', 
     //'encoding' => 'utf8', 
    ); 
} 

什么我做错了什么建议? 正在使用netbeans 7.2.1。创建了一个名为LearnCake

回答

2

像Jimmie Lin说的那样,数据库表的名字应该是复数。但是,它似乎正在寻找一个表格来匹配名为'POST'的模型(全部大写)。

在您的控制器中,将public $name = 'Posts';或放在您的型号中,public $name = 'Post';以确保它不寻找p_o_s_ts。如Jimmie Lin所说,确保表名是复数(即'posts')。

如果您想使用名为'post'的表格,只需在模型中添加public $useTable = 'post';即可。

+1

任何有关它为什么会默认匹配'POST'的见解?我以前见过这种类型的问题,但我认为这一天的咖啡太多了。 –

+0

不知道为什么它可以这样做,以前从未发生过。首先想到的是,它可能是你的路线或服务器配置中的东西 - 可能设置了URL重写来匹配URL参数的“全部大写”版本。不知道,只是一个想法。 – SharkofMirkwood

+0

好的。谢谢。 –

0

您是否制作了表称为postspost项目?数据库表格的名称应该是复数形式,但是根据您的问题使用单数形式。

+0

该表是'posts'。编辑有问题的表名 –