我刚刚在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。
感谢任何帮助。
答案 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开始。