与findAll()和foreach()相关的Cakephp错误

时间:2011-06-18 17:41:40

标签: cakephp cakephp-1.3

我刚刚在http://www.sitepoint.com/application-development-cakephp/完成了本教程,因为我在星期一开始了我的第一个cakephp项目,我收到了一些与findAll()foreach()相关的错误和警告。< / p>

以下是错误:

Warning (512): SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'findAll' at line 1 [CORE\cake\libs\model\datasources\dbo_source.php, line 684].

Warning (2): Invalid argument supplied for foreach() [APP\views\notes\index.ctp, line 11].

这是控制器:     

    function index(){
        $this->set('notes', $this->Note->findAll());
    }

    function view($id){
        $this->Note->id = $id;
        $this->set('data', $this->Note->read());
    }

    function add(){
        if (!empty($this->data['Note']))
        {
            if($this->Note->save($this->data['Note'])){
                $this->flash('Your note has been updated.','/notes/');
            }
        }
    }

    function edit($id = null){
        if (empty($this->data['Note'])){
            $this->Note->id = $id;
            $this->data = $this->Note->read();
        }
        else{
            if($this->Note->save($this->data['Note']))
            {
                $this->flash('Your note has been updated.','/notes/');
            }
        }
    }

    function delete($id){
        if ($this->Note->del($id)){
            $this->flash('The note with id: '.$id.' has been deleted.', '/notes');
        }
    }

}
?>

这是index.ctp:

<h1>My Notes</h1>  
    <p>  
    <?php echo $html->link('Add Note', '/notes/add') ?>  
    </p>  
    <table>  
    <tr>  
        <th>Id</th>  
        <th>Title</th>  
        <th>Created</th>  
    </tr>  
    <?php foreach ($notes as $note): ?>  
    <tr>  
        <td><?php echo $note['Note']['id']; ?></td>  
        <td>  
            <?php echo $html->link($note['Note']['title'], "/notes/view/{$note['Note']['id']}")?>  
        [<?php echo $html->link('Edit', "/notes/edit/{$note['Note']['id']}")?>,  
        <?php echo $html->link('Delete', "/notes/delete/{$note['Note']['id']}", null, 'Are you sure?')?>]  
        </td>  

        <td><?php echo $note['Note']['created']; ?></td>  
    </tr>  
    <?php endforeach; ?>  
    </table>

这是正在使用的database.php文件:

var $default = array(
    'driver'   => 'mysql',
    'connect'  => 'mysql_pconnect',
    'host'     => 'localhost',
    'login'    => 'root',
    'password' => '',
    'database' => 'memo'
    );

所有提供的代码均来自http://www.sitepoint.com/application-development-cakephp/的教程。

问题: 为什么这不起作用? 我正在使用Cakephp 1.3.10。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

问题是你在运行1.3时使用的是Cake 1.1语法。这篇文章大概5岁了!

如果我没记错的话,1.1有一个findAll()方法但是不推荐使用新语法。 Cake 1.3实际上使用以下语法

$this->Note->find('all')

手动:http://book.cakephp.org/view/1021/find-all

你得到第二个错误的原因是foreach试图循环通过不是数组的东西(你的findAll调用可能返回未定义。)。

Cake仍然使用findAllBy<field>语法,但这不是您现在所需要的。

http://book.cakephp.org/view/1025/findAllBy

您可能还想查看博客应用程序教程:http://book.cakephp.org/view/1528/Blog

它涵盖了很多基础知识,应该为你提供足够的入门知识,以便从Cae开始。