来自多表的数据,没有任何关系

时间:2015-05-27 07:47:20

标签: cakephp

我有两个模型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'字段,并希望使用一个模型或任何其他方式显示两个表中的记录列表,但不想使用使用两种模型分开查询。 感谢。

2 个答案:

答案 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');

我通常建议不要使用这种方法,但我相信框架不直接支持你想要实现的目标。