2つのテーブルがdepartmentsありusersます。にusers、次のフィールドがあります。
id | username | password | email | department | date_created
今departments、私は次のフィールドを持っています:
id | name
テーブルのdepartmentフィールドはであり、テーブルの対応するフィールドを指します。Webでレンダリングしたときに、フィールドに表示される対応するものを取得するにはどうすればよいですか?これを試してみましたが、うまくいかないようです。usersINTiddepartmentsnamedepartment
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'));
}
}