2014-11-20 2 views
0

У меня есть 2 таблицы:CakePHP присоединиться только последнюю запись

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

иметь только последний, вы можете 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

Смежные вопросы