CakePHP在本地链接模型,但不在托管副本上链接吗?

时间:2018-06-28 18:18:16

标签: cakephp cakephp-2.0

我的雇员只有一名雇主。在我的员工表中,我有一个名为loyer_id的字段。使用此信息的报告适用于我的本地开发设置,但不适用于我的虚拟主机。我不知道是什么原因导致的。

当我尝试提取所有员工的列表时,出现以下错误:

  

错误:SQLSTATE [42S22]:找不到列:1054未知列   “ where子句”中的“ Employer.last_name”

     

SQL查询:SELECT EmployeeidEmployeeemployer_id,   Employeefirst_nameEmployeelast_nameEmployeeemail,   Employeewebinar_idEmployeequestions,   Employeecorrect_answersEmployeerequired_to_pass,   EmployeestatusEmployeeroleEmployeesport,   EmployeeprogramEmployeecreatedEmployeemodified   sportrisk_wp所在的employeesEmployee   (({Employeelast_name不像'')和(Employerlast_name不   如'')))和contain ='1'ORDER BY Employeecreated DESC LIMIT   50

当我将debug更改为2时,在我的本地副本上,我在SQL日志中看到以下内容(它正在加入雇主):

  

选择EmployeeidEmployeeemployer_id,   Employeefirst_nameEmployeelast_nameEmployeeemail,   Employeewebinar_idEmployeequestions,   Employeecorrect_answersEmployeerequired_to_pass,   EmployeestatusEmployeeroleEmployeesport,   EmployeeprogramEmployeecreatedEmployeemodified,   EmployeridEmployeremployer_idEmployercompany,   Employerfirst_nameEmployerlast_nameEmployerphone,   EmployeremailEmployerusernameEmployerpassword,   EmployerusercodeEmployersubscriberEmployeractive,   EmployeradminEmployercreatedEmployermodified,   Employer中的statuslocal来自employees的左联接   Employeelocalusers开启(EmployerEmployee =   employer_idEmployer)(({idEmployee不像'')和   (last_nameEmployer不像')))依last_name订购。Employee   DESC LIMIT 50

我相信这是所有相关的代码。

UsersController     

created

员工模式

// inside a larger function

// Load Employee Model
$this->loadModel('Employee');

// Base conditions - to hide some old records which do not contain name information.
$conditions = array(
        "Employee.last_name NOT LIKE" => '',
        "Employer.last_name NOT LIKE" => ''
    );

// Find records & paginate
$this->paginate = array(
    'limit' => 50,
    'conditions' => array(
        "AND" => $conditions
    ),
    'order' => array('Employee.created DESC')
);

$employees = $this->paginate('Employee');
?>

雇主模式

<?php
class Employee extends AppModel
{
    var $name = 'Employee';
    var $recursive = 1;
    var $belongsTo = array (
        'Employer' => array (
            'className' => 'Employer',
            'foreignKey' => 'employer_id',
            'order' => 'Employee.last_name ASC'
        )
    );

    public $actsAs = array('Containable');

    var $validate = array(
        'email' => array(
            'rule' => 'notBlank'
        ),
        'first_name' => array(
            'rule' => 'notBlank'
        ),
        'last_name' => array(
            'rule' => 'notBlank'
        ),
        'usercode' => array(
            'rule' => 'notBlank'
        )
    );
}
?>

我不知道为什么它不在一个环境中链接雇主模型,而在另一个环境中链接。我已经直接复制了所有文件。

SQL查询

这是我在托管站点上获得的查询

<?php
class Employer extends AppModel
{
    var $name = 'Employer';
    var $recursive = -1;
    var $hasOne = 'Supervisor';
    var $hasMany = 'Employee';

    public $useTable = 'users';
    public $actsAs = array('Containable');

    var $validate = array(
        'email' => array(
            'rule' => 'notBlank'
        ),
        'password' => array(
            'rule' => 'notBlank'
        )
    );
}
?>

这就是我在本地站点上找到的(以及正在寻找的东西)

SELECT `Employee`.`id`, `Employee`.`employer_id`, `Employee`.`first_name`, `Employee`.`last_name`, `Employee`.`email`, `Employee`.`webinar_id`, `Employee`.`questions`, `Employee`.`correct_answers`, `Employee`.`required_to_pass`, `Employee`.`status`, `Employee`.`role`, `Employee`.`sport`, `Employee`.`program`, `Employee`.`created`, `Employee`.`modified` FROM `sportrisk_wp`.`employees` AS `Employee` WHERE ((`Employee`.`last_name` NOT LIKE '') AND (`Employer`.`last_name` NOT LIKE '')) ORDER BY `Employee`.`created` DESC LIMIT 50

结束结果 最后(在与Ved聊天之后),我的分页数组最终变成了这样,并且我的报告加载了。

SELECT `Employee`.`id`, `Employee`.`employer_id`, `Employee`.`first_name`, `Employee`.`last_name`, `Employee`.`email`, `Employee`.`webinar_id`, `Employee`.`questions`, `Employee`.`correct_answers`, `Employee`.`required_to_pass`, `Employee`.`status`, `Employee`.`role`, `Employee`.`sport`, `Employee`.`program`, `Employee`.`created`, `Employee`.`modified`, `Employer`.`id`, `Employer`.`employer_id`, `Employer`.`company`, `Employer`.`first_name`, `Employer`.`last_name`, `Employer`.`phone`, `Employer`.`email`, `Employer`.`username`, `Employer`.`password`, `Employer`.`usercode`, `Employer`.`subscriber`, `Employer`.`active`, `Employer`.`admin`, `Employer`.`created`, `Employer`.`modified`, `Employer`.`status` FROM `local`.`employees` AS `Employee` LEFT JOIN `local`.`users` AS `Employer` ON (`Employee`.`employer_id` = `Employer`.`id`) WHERE ((`Employee`.`last_name` NOT LIKE '') AND (`Employer`.`last_name` NOT LIKE '')) ORDER BY `Employee`.`created` DESC LIMIT 50

1 个答案:

答案 0 :(得分:2)

我认为您忘记了加载关联的数据,请使用contain

// Find records & paginate
$this->paginate = array(
    'contain' => array('Employer'),
    'fields' => array('Employer.id'), // add more fields
    'limit' => 50,
    'conditions' => array(
        "AND" => $conditions
    ),
    'joins' => array( array( 'alias' => 'Employer', 'table' => 'users', 'type' 
    => 'LEFT', 'conditions' => 'Employer.id = Employee.employer_id' ) ),
    'order' => array('Employee.created DESC')
);