我有两个模型PrintEvent和SocialEvent,下面有两个表: -
print_events: -
╔════╤════════════════════════╤════════════╗
║ id │ name │ date ║
╠════╪════════════════════════╪════════════╣
║ 1 │ Important print event1 │ 01/05/2015 ║
╟────┼────────────────────────┼────────────╢
║ 2 │ Important print event2 │ 02/05/2015 ║
╟────┼────────────────────────┼────────────╢
║ 3 │ Important print event3 │ 03/05/2015 ║
╚════╧════════════════════════╧════════════╝
social_events: -
╔════╤═════════════════════════╤════════════╗
║ id │ name │ date ║
╠════╪═════════════════════════╪════════════╣
║ 1 │ Important social event1 │ 01/05/2015 ║
╟────┼─────────────────────────┼────────────╢
║ 2 │ Important social event2 │ 02/05/2015 ║
╟────┼─────────────────────────┼────────────╢
║ 3 │ Important social event3 │ 03/05/2015 ║
╚════╧═════════════════════════╧════════════╝
现在我有一个搜索表单,其中包含'event date from'和'event date to'字段,并希望使用一个模型或任何其他方式显示两个表中的记录列表,但不想使用使用两种模型分开查询。 感谢。
答案 0 :(得分:0)
桌子之间没有关系?然后你只需要做2个查询。
或只是这样做:
class yourFirstModel extends AppModel{
$public $hasMany = array('secondModel');
}
然后
class secondModel extends AppModel{
$public $belongTo = array('yourFirstModel');
}
当您查询任何这些模型时,您应该能够从两个表中获取数据。
好的,如果您不想使用我的第一种方法,这是使用连接的另一种方法。
您修改查询以符合您自己的规范。
$this->PrintEvent->find('all', array(
'joins' => array(
array(
'table' => 'social_events',
'alias' => 'EventJoin',
'type' => 'INNER',
'conditions' => array(
'EventJoin.date = PrintEvent.date'
)
)
),
'conditions' => array(
'PrintEvent.date' => $searchConditions
),
'fields' => array('EventJoin.*', 'PrintEvent.*'),
'order' => 'PrintEvent.date DESC'
));
请注意,这必须在您的控制器中。 如果有帮助,请告诉我。
答案 1 :(得分:0)
据我所知,CakePHP模型每个只能代表一个表。您可能需要使用query()
来执行UNION SQL: -
$this->PrintEvent->query('SELECT id, name, date FROM print_events UNION SELECT id, name, date FROM social_events');
我通常建议不要使用这种方法,但我相信框架不直接支持你想要实现的目标。