我有两张桌子,departments和users.在users,我有以下字段:
id | username | password | email | department | date_created
Run Code Online (Sandbox Code Playgroud)
现在departments,我有以下字段:
id | name
Run Code Online (Sandbox Code Playgroud)
在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);
}
}
Run Code Online (Sandbox Code Playgroud)
我应该用它来检索数据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
Run Code Online (Sandbox Code Playgroud)
第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'));
}
}
Run Code Online (Sandbox Code Playgroud)
您还需要告诉控制器为Departments加载模型.默认情况下,它仅加载用户.
将其添加到控制器的顶部:
var $uses = array('User', 'Department');
Run Code Online (Sandbox Code Playgroud)