2013-07-16 45 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'。編輯有問題的表名 –