0

我正在尝试使用 Profiles 和 Qualifications 表之间的 HABTM 关联。

型号:Profile.php

App::uses('AppModel', 'Model');
class Profile extends AppModel {
    public $hasAndBelongsToMany = array(
        'Qualifications' => array(
        'className' => 'Qualification',
        'joinTable' => 'profile_qualifications',
        'foreignKey' => 'profile_id',
        'associationForeignKey' => 'qualification_id',
        'unique' => 'keepExisting'
        )
    );
}

型号:Qualification.php

App::uses('AppModel', 'Model');
class Qualification extends AppModel {
    public $hasAndBelongsToMany = array(
        'Profile' => array(
        'className' => 'Profile',
        'joinTable' => 'profile_qualifications',
        'foreignKey' => 'qualification_id',
        'associationForeignKey' => 'profile_id',
        'unique' => 'keepExisting',
        )
    );
}

控制器:ProfilesController.php

App::uses('AppController', 'Controller');
class ProfilesController extends AppController {
    public function add() {
        $qualifications = $this->Qualification->find('list'); /* Attempt 1 */
        $qualifications = $this->Profile->Qualification->find('list'); /* Attempt 2 */
        $qualifications = $this->Profile->ProfileQualification->Qualification->find('list'); /* Attempt 3 */
    }
}

作为评论提到的所有三个尝试都给了我一个错误说:

Error: Call to a member function find() on a non-object
File:  ~/app/Controller/ProfilesController.php
Line:  xxx

我想知道如何生成 Qualifications 表中所有条目的列表?此外,我的代码现在有什么错误?

4

1 回答 1

0

在您的配置文件模型中,您的 HABTM 与 Qualification 关系的别名是“Qualifications”,因此在控制器内部您必须使用: $qualifications = $this->Profile->Qualifications->find('list'); 或从模型中删除复数。

为了防止此类错误并节省您的时间,使用蛋糕烘焙控制台在线 CakePHP 烘焙工具自动生成代码非常有用。

于 2013-05-01T09:10:13.567 回答