在我们的CakePHP应用程序中,我们有两个表:
活动表
event_dates表
选择每个事件及其对应的一个日期。该日期将与当前日期最接近。
这意味着,event_dates
表中有4个事件的日期event_id
1(event_id
是外键)。然后我想为事件1选择一行start_date = 2013-09-21
,因为这是与当前日期最近的日期。
我该怎么做?
这是我的代码:
$events = $this->Event->find('all');
但是上面的所有日期都包含重复事件记录。
答案 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