hasMany加入cakephp错误

时间:2014-03-19 10:13:41

标签: mysql cakephp join has-many

我有一张表jobs,其结构类似于下面的内容:

id      desc
1       Job Description

用于保存作业类别的表job_categories

id   job_id   category_id
1    1        2
2    1        3
3    1        4

因此,要在1中获取ID为JobsController.php的作业的类别,我写道:

$similar_conditions['JobCategory.job_id'] = 1;
$similar_jobs = $this->Job->find('all',array('conditions' => $similar_conditions));

我的工作模式Job.php是:

class Job extends AppModel {
    var $name = 'Job';
    var $belongsTo = array('Qualification');
    var $hasMany = array('JobCategory');   
}    

但它显示错误SQLSTATE[42S22]: Column not found: 1054 Unknown column 'JobCategory.job_id' in 'where clause'。它生成的查询是:

  

SQL查询:SELECT JobidJobjob_title,   Jobjob_descriptionJobjob_skillsJobcontact_number,   Jobcontact_emailJobqualification_idJobexperience,   JobcategoriesJobremarksJobsupport_image,   Jobfreshers_applyJobadded_onJobstatus,   QualificationidQualificationname FROM cakeadjobs AS   Job LEFT JOIN cakeadqualifications AS Qualification ON   (Jobqualification_id = Qualificationid)WHERE   JobCategoryjob_id = 1

为什么我的桌子job_categories没有加入?

2 个答案:

答案 0 :(得分:2)

来自Cakephp Documentation

  

hasMany,belongsTo或hasOne关系中的外键   默认情况下被识别为相关表的(单数)名称   然后是_id。因此,如果贝克有很多蛋糕,那么蛋糕桌就会   通过baker_id外键引用面包师表。对于一个倍数   像category_types这样的措辞表,外键就是   category_type_id。

试试这个

var $hasMany = array(
        'JobCategory' => array(
            'className' => 'JobCategories',
            'foreignKey' => 'job_id',
            'dependent' => true,
        )
    );

答案 1 :(得分:0)

我认为问题出在$similar_conditions['JobCategory.job_id'] = 1;。 你不能在你的工作模型中使用['JobCategory.job_id']。

试试这个

$similar_jobs = $this->Job->find('all',array(
                        'contain' => array(
                                 'JobCategory' => array(
                                         'conditions' => array(
                                                           $similar_conditions
                                                         )
                                                   )
                                                 )
                                         )
                                      );

并为AppModel添加可包含的行为