CakePHP 2.3:$ this-> Model-> find(' list')返回记录,$ this-> Model-> find(' all')不

时间:2015-02-02 15:41:21

标签: cakephp cakephp-2.3 cakephp-appmodel

我有一个奇怪的问题。我有一个名为Courses的模型。此模型与另一个数据库中的另一个模型关联。这是一个非常简单的配置,没有太复杂。

当我运行时:

$courses = $this->Course->find('all');

没有返回任何内容。在调试模式下,它显示的SQL是正确的,并且在手动运行SQL时它确实正确运行,但结果不会保存到变量$ courses中。

我也试过这个:

debug($this->Course->find('all'));

再次 - 在调试的SQL部分正确显示了SQL,但调试会话中没有显示任何记录。

Query - $this->Model->find('all')

现在对于奇怪的部分 - 如果我将'all'更改为'first',则会显示第一条记录,并且一切都按预期工作。

$courses = $this->Course->find('first');

Query - $this->Model->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);

有什么想法吗?

1 个答案:

答案 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',
);