У меня есть сотрудники, у которых есть один работодатель. В моей таблице сотрудников у меня есть поле Employer_id. Отчет, использующий эту информацию, работает на моей локальной установке разработки, но не на моем веб-хостинге. Я не могу понять, что может быть причиной этого.
Когда я пытаюсь получить список всех сотрудников, я получаю следующую ошибку:
Ошибка: SQLSTATE [42S22]: столбец не найден: 1054 столбец неизвестен
'Employer.last_name' в 'предложении where'
SQL-запрос: 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
ОТ
sportrisk_wp
. employees
КАК Employee
ГДЕ
((Employee
. last_name
НЕ НРАВИТСЯ '') И (Employer
. last_name
НЕ
LIKE '')) AND contain
= '1' ORDER BY Employee
. created
DESC LIMIT
50
На моей локальной копии, когда я изменяю debug
на 2, я вижу следующее в журнале SQL (он присоединяется к работодателю):
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
ОТ local
. employees
КАК Employee
ВПРАВО
local
. users
AS Employer
ON (Employee
. employer_id
=
Employer
. id
) ГДЕ ((Employee
. last_name
НЕ НРАВИТСЯ '') И
(Employer
. last_name
НЕ НРАВИТСЯ '')) ЗАКАЗАТЬ ПО Employee
. created
DESC LIMIT 50
Я полагаю, что это весь соответствующий код.
UsersController
// 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'
)
);
}
?>
Модель работодателя
<?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'
)
);
}
?>
Не могу понять, почему она не связывает модель Работодателя в одной среде, а в другой. Я сделал прямую копию всех файлов.
SQL-запросы
Это запрос, который я получаю на размещенном сайте
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
Это то, что я получаю на своем локальном сайте (и что я ищу)
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
КОНЕЦ РЕЗУЛЬТАТ
В конце (после чата с Ved) мой массив страниц оказался таким, и мой отчет загружается.
$this->paginate = array(
'contain' => array('Employer'),
'limit' => 50,
'conditions' => array(
"AND" => $conditions
),
'joins' => array( array( 'alias' => 'Employer', 'table' => 'users', 'type' => 'LEFT', 'conditions' => 'Employer.id = Employee.employer_id' ) ),
'fields' => array('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', 'Employer.id', 'Employer.employer_id', 'Employer.company', 'Employer.first_name', 'Employer.last_name', 'Employer.email', 'Employer.active'),
'order' => array('Employee.created DESC')
);