CakePHP只加入最新的条目

时间:2014-11-20 07:42:26

标签: cakephp join

我有两张桌子:

ORDERS
------
id
type

LOGS
----
id
order_id
time

我想用cakephp查询,所以我有:

array(
    'Order' => array(
        'id' => '38',
        'type' => 'online',
    ),
    'Log' => array(
        'time' => '2014-09-24 21:17:14'
    )
)

问题是我只想要最后一个订单,而不是所有日志的所有订单。

我做了类似的事情:

$ordersList = $this->Order->find('all', array(
    'fields' => array(
        'Order.*',
        'Log.time'
     ),
     'joins' => array(
         array(
             'table' => 'logs',
             'alias' => 'Log',
             'type'  => 'right',
             'conditions' => array(
                 'Log.order_id = Order.id'
             ),
         )
     ),
);

1 个答案:

答案 0 :(得分:1)

要只拥有最后一个,您可以按order log.time结果,然后只获取第一条记录(使用参数'first'或仅获取第一条记录记录)。

例如:

$order = $this->Order->find('first', array(
    'order' => array('Log.time' => 'desc')
));

在你的情况下:

$ordersList = $this->Order->find('first', array(
    'fields' => array(
        'Order.*',
        'Log.time'
     ),
     'joins' => array(
         array(
             'table' => 'logs',
             'alias' => 'Log',
             'type'  => 'right',
             'conditions' => array(
                 'Log.order_id = Order.id'
             ),
             'order' => array('Log.time' => 'desc')
         )
     ),
);

作为信息,如果您想要一个简单的方法来加入模型,请查看containable行为。通过此行为,链接在模型中设置,然后您只需声明要使用当前模型检索哪个关联模型。 => http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html