Cakephp:如何获取关联模型上特定字段的数据

时间:2014-09-03 08:16:11

标签: php mysql cakephp cakephp-2.0

我正在使用cakephp框架。我的数据库,课程和模块表上有两个表。那些表是相关的,课程有很多模块。基本上我想获得有关课程和模块的数据,但有特定的领域。我想获得课程的ID和标题以及模块的ID和标题。

此代码:

$courses_taken = $this->Course->find('all', array(
    'conditions' => array('Course.id' => $course_id_list),
    'fields' => array('Course.id', 'Course.title')
));

给了我:

array(
    (int) 0 => array(
        'Course' => array(
            'id' => '1',
            'title' => 'course 1'
        ),
        'Module' => array(
            (int) 0 => array(
                'id' => '1',
                'course_id' => '1',
                'title' => 'module 1',
                'image' => null,
                'content' => 'Lorem ipsum',
                'voice_over' => null,
                'created' => '2014-09-03 14:02:25',
                'modified' => '2014-09-03 14:02:28'
            ),
            (int) 1 => array(
                'id' => '2',
                'course_id' => '1',
                'title' => 'module 2',
                'image' => null,
                'content' => 'Sasdas',
                'voice_over' => null,
                'created' => null,
                'modified' => null
            )
        )
    ),
    (int) 1 => array(
        'Course' => array(
            'id' => '2',
            'title' => 'course 2'
        ),
        'Module' => array()
    )
)

但我想为模块选择一个特定字段,所以我尝试了这段代码:

$courses_taken = $this->Course->find('all', array(
    'conditions' => array('Course.id' => $course_id_list),
    'fields' => array('Course.id', 'Course.title', 'Module.id', 'Module.title')
));

但是给了我一个错误:找不到列:1054'字段列表'中的未知列'Module.id'。 请帮助我们。谢谢。

3 个答案:

答案 0 :(得分:4)

得到答案,为了使sgt的答案工作,$ actsAs属性应该添加到课程模型中。参考:http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

答案 1 :(得分:0)

要么使用像Containable这样的行为,你的find()将如下所示:

$courses_taken = $this->Course->find('all', array(
    'conditions' => array('Course.id' => $course_id_list),
    'fields' => array('Course.id', 'Course.title'),
    'contain' => array(
        'Module' => array(
            'fields' => array('Module.id', 'Module.title'),
        ),
    ), 
));

答案 2 :(得分:0)

试试这个 -

$courses_taken = $this->Course->find('all', array(
    'conditions' => array('Course.id' => $course_id_list),
    'fields' => array('Course.id', 'Course.title'),
    'contain' => array('Module.id', 'Module.title')
));