查询返回CakePHP中的空数组(模型和控制器已设置)

时间:2010-12-19 04:43:54

标签: mysql cakephp

我在控制器中使用Cake的find('all')方法来查询我拥有的表,并使用requestAction方法在视图中使用控制器函数(以便输出数据)。问题是find方法返回空数组(输出是'ArrayArrayArray')。该表名为'users'(根据Cake约定),所有三个文件的代码如下:

视图代码(test.ctp)

<?php
$users = $this->requestAction('/users/read');
foreach($users as $user) {
     echo $user;
}
?>

控制器代码(users_controller.php)

<?php
 class UsersController extends AppController {

         var $name = 'Users';

  function read(){
   $users = $this->User->find('all');
   if(isset($this->params['requested'])) {
    return $users;
   } 
  }
 }
?>

模型代码(user.php)

<?php

    class User extends AppModel {
        var $name = 'User';
    }

?>

我已经减少它并发现$ this-&gt; User-&gt; find('all')语句将$ users设置为NULL,因为该语句实际上没有返回任何值。我知道Cake正在寻找这张桌子,因为我之前使用的是表名('usres'而不是'users')。我无法弄清楚我错过了什么,或者我做错了什么。会爱一些帮助。 :)

2 个答案:

答案 0 :(得分:1)

输出是'ArrayArrayArray'并不意味着它是空的

foreach($users as $user) { 
debug($user); 
}

答案 1 :(得分:0)

对我来说,这段代码毫无意义。

如果你想使用requestAction()以正确的方式使用它。它用于在视图中调用(和打印)应用程序的各个部分。

以下是如何实现正确的代码:

您的用户类:

class Users extends AppController {
   function read(){
      $this->set('users', $this->User->find('all'));
      $this->layout = "ajax";
      $this->render();
   }
}

您的read.ctp:

<ul><?php
if(isset($users)){
   foreach($users as $user) {
     echo '<li>'.$user.'</li>';
   }
}
?></ul>

现在在test.ctp中,您需要致电:

<?php echo $this->requestAction(
                  array(
                        'controller'=>'users', 
                        'action'=>'read'
                  )
);?>

您将在测试操作中看到未排序列表中的结果。