我有一个奇怪的问题。我有一个名为Courses的模型。此模型与另一个数据库中的另一个模型关联。这是一个非常简单的配置,没有太复杂。
当我运行时:
$courses = $this->Course->find('all');
没有返回任何内容。在调试模式下,它显示的SQL是正确的,并且在手动运行SQL时它确实正确运行,但结果不会保存到变量$ courses中。
我也试过这个:
debug($this->Course->find('all'));
再次 - 在调试的SQL部分正确显示了SQL,但调试会话中没有显示任何记录。
现在对于奇怪的部分 - 如果我将'all'更改为'first',则会显示第一条记录,并且一切都按预期工作。
$courses = $this->Course->find('first');
我尝试将此语句移动到其他控制器,结果是一样的。 sql生成并正常运行,但结果不会通过Cake返回并保存在变量中。我不认为这是一个变量问题,因为如果我将find包装在调试语句中,它将无法正确返回。如果它是一个变量问题,那么当我从方程式中删除变量时它会起作用,但它也不起作用。
我在CakePHP 2.5.5上。我尝试更新到2.6.1,但结果是一样的。
我尝试将SQL插入变量并将其作为查询运行。针对数据库运行的SQL有效,但是当我使用模型运行它时它不起作用。与查找全部的结果相同。
$sql = "SELECT " .
" `Course`.`id`, `Course`.`title`, `Course`.`descr`, `Course`.`created`, `Course`.`modified`, `Course`.`hours`, `Course`.`price`, " .
" `Course`.`accounting_code_id`, `Course`.`serf_course_id`, `Course`.`comp_code`, `Course`.`course_type`, `Course`.`clinic`, `Course`.`pharmacy`, " .
" `Course`.`healthcare_professional`, `Course`.`scholarship`, `Course`.`pharmacy_tech`, `Course`.`uan`, `Course`.`available`, `Course`.`acpe`, `AccountingCode`.`id`, " .
" `AccountingCode`.`code`, `AccountingCode`.`code_description`, `AccountingCode`.`buyer_percentage`, `AccountingCode`.`created`, `AccountingCode`.`modified`," .
" `AccountingCode`.`deleted`, `AccountingCode`.`created_user_id`, `AccountingCode`.`modified_user_id`, `AccountingCode`.`deleted_user_id`, " .
" `AccountingCode`.`deleted_record` FROM `cips`.`courses` AS `Course` LEFT JOIN `cips`.`accounting_codes` AS `AccountingCode` ON (`Course`.`accounting_code_id` = " .
" `AccountingCode`.`id`) WHERE 1 = 1";
$this->Course->recursive = 0;
// $allCourses = $this->Course->find('all');
$allCourses = $this->Course->query($sql);
debug($allCourses, true, true);
有什么想法吗?
答案 0 :(得分:0)
好的 - 在同事的帮助下想出这个。 在数据库配置中,我必须为utf8指定编码。一旦我更改了配置,查找就会按预期工作。
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'llll',
'password' => 'pppp',
'database' => 'dddd',
'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
'encoding'=>'utf8',
);