CakePHP SQL Ошибка - PullRequest
       2

CakePHP SQL Ошибка

0 голосов
/ 08 сентября 2011

Я пытаюсь выполнить очистку записей в базе данных, хотя, когда я сделал свой запрос и связи, мне кажется, что он не хочет делать это правильно. Я получил следующую ошибку, и я запутался, почему это происходит:

SQL Error: 1054: Unknown column 'GuardiansStudents.student_id' in 'where clause'

Запрос, который отображается впоследствии, выглядит следующим образом:

Query: SELECT `User`.`id`, `Guardian`.`id` 
       FROM `guardians` AS `Guardian` 
       LEFT JOIN `users` AS `User` ON (`Guardian`.`user_id` = `User`.`id`) 
       WHERE `GuardiansStudents`.`student_id` IS NULL 
       AND `User`.`active` = 1 AND `User`.`changeapprovalneeded` = 0    

У меня также есть следующие ассоциации в модели Guardian, я не уверен, что я делаю это правильно, и, возможно, именно здесь происходит ошибка:

class Guardian extends AppModel {

    var $name = 'Guardian';

    //The Associations below have been created with all possible keys,
    // those that are not needed can be removed
    var $belongsTo = array(
       'User' => array(
           'className' => 'User',
           'foreignKey' => 'user_id',
           'conditions' => '',
           'fields' => '',
           'order' => ''
        ),
    );

    var $hasAndBelongsToMany = array(
        'Student' => array(
            'className' => 'Student',
            'joinTable' => 'guardians_students',
            'foreignKey' => 'guardian_id',
            'associationForeignKey' => 'student_id',
            'unique' => true,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'deleteQuery' => '',
            'insertQuery' => ''
        )
    );

Это код для выполнения функции очистки:

function manager_purgebygrade() {
    ini_set('max_execution_time','120');
    $this->layout = "manager";
    $this->User->recursive = 0;
    $grades = $this->User->Student->Grade->getDropDownList();
    $this->set(compact('grades'));
    //debug($this->data);
    if(!empty($this->data['User']['grade_id']))
    {
        //$this->User->bindModel(array())
        $users = $this->User->find(
            'list',
            array(
                'fields' => array(
                    'User.id'
                 ),
                 'conditions' => array(
                     'Student.grade_id' => $this->data['User']['grade_id']
                 ),
                 'recursive' => 0
             )
         );
        //debug($users);
        $this->User->deleteAll(array('User.id' => $users), true);
        $this->User->Guardian->bindModel(
             array('hasOne' => array('GuardiansStudents')));
        $guardianswithnostudents = $this->Guardian->deleteGuardiansWithNoStudent();
        $guardians = $this->User->Guardian->find(
            'list',
            array(
                'fields' => array(
                    'User.id',
                    'User.id'
                 ),
                 'conditions' => array(
                     'GuardiansStudents.student_id' => null,
                     'User.active' => 1,
                     'User.changeapprovalneeded' => 0
                 ),
                 'recursive' => 1
            )
        );
        $this->User->deleteAll(array('User.id' => $guardians), true);
        $this->set(compact('users','guardians','guardianswithnostudents'));
    }
}

Надеюсь, кто-то может указать мне правильное направление, я был бы очень признателен:).

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Ваше предложение where:

WHERE `GuardiansStudents`.`student_id` IS NULL 

использует таблицу GuardiansStudents, которая нигде не встречается в предложении from или join.

1 голос
/ 08 сентября 2011

модель GuardiansStudent, а не GuardiansStudents.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...