【问题标题】:HABTM error not unique table aliasHABTM 错误不是唯一的表别名
【发布时间】:2014-09-18 14:23:56
【问题描述】:

我正在尝试将 HABTM 模型与联接链接,但我不断收到此错误。 Tutor 有一张独特的桌子,所以我不确定为什么会出现这个错误? 这里是控制器和模型的关系

错误:SQLSTATE[42000]:语法错误或访问冲突:1066 Not unique table/alias: 'Tutor'

class Subject extends AppModel {
public $hasAndBelongsToMany = array(

    'Tutor' => array(
        'className' => 'Tutor',
        'joinTable' => 'tutors_subjects',
        'foreignKey' => 'subject_id',
        'associationForeignKey' => 'tutor_id',
        'unique' => 'keepExisting',
        'conditions' => '',

    )
);

}

class Tutor extends AppModel {
    ..

    public $hasAndBelongsToMany = array(
        'Subject' => array(
            'className' => 'Subject',
            'joinTable' => 'tutors_subjects',
            'foreignKey' => 'tutor_id',
            'associationForeignKey' => 'subject_id',
            'unique' => 'keepExisting',
            'conditions' => '',

        ),

    );

class TutorsController extends AppController {

 public function tutordetails() {

     //    $tutor=$this->Tutor->find('all', array(  'conditions'=>array('Tutor.id'=> 1),'recursive' => -1 ) );
     //    $this->set( 'tutor',$tutor);
       //   debug($tutor);



            $options2['joins'] = array(
               array('table' => 'tutors_subjects',
                'alias' => 'TutorsSubject',
                'type' => 'LEFT',
                'conditions' => array(
                'Tutor.id = TutorsSubject.id',
                 )
                 ),

                array('table' => 'subjects',
                'alias' => 'Subject',
                'type' => 'LEFT',
                'conditions' => array(
                'TutorsSubject.subject_id=Subject.id',
                 )
                 ),

                 array( 'table' => 'tutors',
            'alias' => 'Tutor',
            'type' => 'LEFT',
            'conditions' => array(
            'TutorsSubject.tutor_id = Tutor.id',
        )

            ));





            $options2['fields'] = array('Subject.*','TutorsSubject.*','Tutor.*');



            $options2['conditions'] = array('Tutor.id'  => 2);
            $subject=$this->Tutor->find('first',$options2);


            $this->set('subject', $subject);
            debug($subject);

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    问题是您的 JOIN 子句中的这段代码:

     array( 'table' => 'tutors',
            'alias' => 'Tutor',
            'type' => 'LEFT',
            'conditions' => array(
            'TutorsSubject.tutor_id = Tutor.id',
    

    您正在 Tutors 模型上执行查找,尝试自我 JOIN 并使用相同的别名。

    试试这个:

     array( 'table' => 'tutors',
            'alias' => 'TutorOther',
            'type' => 'LEFT',
            'conditions' => array(
            'TutorsSubject.tutor_id = TutorOther.id',
    

    【讨论】:

    • 求助!我刚发现加入不起作用。我没有收到错误,但没有收到任何相关记录。我只是从其他表中得到 NULL,tutor.id=2 这是不正确的。 $this->Tutor->recursive = -1; $options2['conditions'] = array('Tutor.id' => 2);
    • @ajt - 您是否有需要放入 Cakephp 语法的 SQL 代码?如果是这样,请编辑原始问题并添加该工作 sql
    • 我可能会开始另一个问题,因为我的原始问题已经得到回答,因为添加第二个问题会变得有点混乱
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2020-03-06
    • 1970-01-01
    相关资源
    最近更新 更多