我有两个表,departments
和users
。在users
,我有以下字段:
id | username | password | email | department | date_created
现在departments
,我有以下字段:
id | name
department
表上的users
字段为INT
,并指向id
表上的相应departments
。如何在网络上呈现时检索要在name
字段上显示的相应department
?我试过这样做,但似乎没有用。
class UsersController extends AppController {
public function index() {
$this->set('users', $this->User->find('all'));
$departmentsArray = array();
$departments = $this->Department->find('all');
foreach ($departments as $department) {
$departmentsArray[$department['Department']['id']] = $department['Department']['name'];
}
$this->set('departments', $departmentsArray);
}
}
我应该用它来检索View\Users\index.ctp
上的数据。但是,它给了我一个错误:
Error: Call to a member function find() on a non-object
File: D:\server\root\app\Controller\UsersController.php
Line: 11
第11行是我在上面给出的第一个代码块中的$departments = $this->Department->find('all');
。
很抱歉,如果这看起来太复杂了,如果有更简单的方法来解决这个问题,请告诉我。我想简单地说,我需要通过另一个表定义的id来检索表中的数据。
修改
来自 Hyarion 的其他信息,而不是使用find('all')
我使用find('list')
所以我将代码行从6减少到1! :)这是新代码:
class UsersController extends AppController {
var $uses = array('User', 'Department');
public function index() {
$this->set('users', $this->User->find('all'));
$this->set('departments', $this->Department->find('list'));
}
}
答案 0 :(得分:5)
您还需要告诉控制器加载Departments的模型。默认情况下,它只加载用户。
将其添加到控制器的顶部:
var $uses = array('User', 'Department');