0

在我们的 CakePHP 应用程序中,我们有两个表:

  • 事件
  • 事件日期

事件表 事件表

event_dates 表 event_dates 表

选择每个事件及其对应的一个日期。该日期将最接近当前日期。

这意味着,表中有 4 个事件的日期event_datesevent_id1(event_id是外键)。然后我想为事件 1 选择一行start_date = 2013-09-21,因为这是与当前日期最近的日期。

我怎样才能做到这一点?

这是我的代码:

$events = $this->Event->find('all');

但是上面的所有日期都带有重复的事件记录。

4

2 回答 2

1

如果您想通过子结果的存在来限制主要结果,则必须使用 JOIN。像这样的东西,你也可以设置数据的顺序。这只是想法,请根据您的要求进行修改。

$options['joins'] = array(
    array('table' => 'event_dates',
          'alias' => 'EventDate',
          'type' => 'INNER',
          'conditions' => array(
                'EventDate.event_id = Event.id'
                'EventDate.start_date <' => date('Y-m-d H:i:s')
                 )
            )
        );

$options['fields'] = array('Event.id', 'Event.name', 'Event.address');

$events = $this->Event->find('all', $options);

有关更多详细信息,您可以查看http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#joining-tables

于 2013-09-20T06:32:28.910 回答
0

app/Model/EventDate.php

添加以下内容:

public $hasOne = 'EventDate';

现在,当您运行$this->Event->find('all');关联的 event_dates 时,将自动添加。如果您没有结果,这意味着在您的应用程序模型中,递归可能仅限于包含当前模型(这始终是一个好主意,因为它可以加速整个系统)。在这种情况下,您可以$this->Event->recursive = 1;在 find 方法之前添加。或public $recursive = -1;$this->Event->find('all', array('recursive'=>1));

您将在 CakePHP 文档中找到更多信息:http: //book.cakephp.org/2.0/en/models/retrieving-your-data.html

于 2015-09-20T21:22:30.860 回答