如何在CakePHP中选择一条记录

时间:2013-09-20 05:20:45

标签: cakephp-2.3

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

  • 事件
  • event_dates

活动表 events table

event_dates表 event_dates table

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

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

我该怎么做?

这是我的代码:

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

app/Model/EventDate.php

添加以下内容:

public $hasOne = 'EventDate';

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

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