1

我是 cakephp 新手。我正在使用查询生成器使用 cakephp 查询生成器中的连接从两个表中获取详细信息。但是我正在编写的查询仅从一个表中获取详细信息。也需要帮助从其他表中获取数据。

这是我通过加入两个表来获取数据的代码:

public function edit($id = null) {

    $events_table = TableRegistry::get('Events');

    $events = $events_table->find('all') 
            ->hydrate(false)
            ->join([
            'CourseType'=>  [
                        'table'      => 'coursetype',
                        'type'       => 'LEFT',
                        'conditions' => 'Events.type = CourseType.coursetype_id',
                    ]                   
            ])->where(['Events.id' => $id]);

     $event = $events->toArray();       
     $this->set('event', $event);
}

结果,我只从事件表中获取详细信息。但我也需要来自 coursetype 的数据。感谢任何帮助。谢谢你。

4

2 回答 2

1

手动添加连接不会导致选择任何其他数据,您必须通过指定要通过该select()方法选择的字段来自行执行此操作。

$events = $events_table
    ->find('all') 
    ->hydrate(false)
    ->select($events_table)
    // either add the fields one by one, or pass a table object
    // as above to select all fields of the table
    ->select(['CourseType.id', 'CourseType.xyz', /* ... */])
    // ...

我建议改用使用容器,即如果不存在则设置所需的关联,然后简单地使用contain()

$events = $events_table
    ->find('all') 
    ->hydrate(false)
    ->contain('CourseType')
    ->where(['Events.id' => $id]);

也可以看看

于 2017-07-28T09:51:22.013 回答
-3

您的解决方案:CakePHP find method with JOIN

于 2017-07-28T08:52:09.523 回答