2013-04-25 4 views
1

У меня есть 2 заказа и сообщение в таблице, теперь я хочу показать заявку на бронирование и сообщение во входящих.Как отсортировать дату массива мудрый в cakephp

$this->paginate = array(
      'conditions' => $conditions,'limit' =>10, 
     'order'=>array('Booking.created'=>'DESC')); 
    $bookings = $this->paginate('Booking'); 

    $this->paginate = array(
      'conditions' => $conditions,'limit' =>10, 
     'order'=>array('MessageDetail.created'=>'DESC')); 
    $messages = $this->paginate('MessageDetail'); 

я есть объединить оба данных таблицы (array_merge ($ букировок $ сообщений);) теперь я хочу, чтобы это своего рода дата мудрый (или каких-либо условий)

Array 
(
[0] => Array 
    (
     [Booking] => Array 
      (
       [id] => 4 
       [host_id] => 21 
       [place_id] => 10 
       [room_id] => 13 
       [user_id] => 12 
       [message_detail_id] => 16 
       [created] => 2013-04-23 14:44:03 
       [accept_date] => 
       [cancel_date] => 
      ) 

    ) 

[1] => Array 
    (
     [Booking] => Array 
      (
       [id] => 3 
       [host_id] => 21 
       [place_id] => 10 
       [room_id] => 13 
       [user_id] => 12 
       [message_detail_id] => 13 
       [created] => 2013-04-15 14:10:59 
       [accept_date] => 2013-04-15 14:40:47 
       [cancel_date] => 
      ) 

    ) 


[2] => Array 
    (
     [MessageDetail] => Array 
      (
       [id] => 17 
       [message_id] => 2 
       [user_id] => 12 
       [sender_id] => 21 
       [unread] => 0 
       [created] => 2013-04-24 12:11:47 
      ) 

    ) 

[3] => Array 
    (
     [MessageDetail] => Array 
      (
       [id] => 15 
       [message_id] => 2 
       [user_id] => 12 
       [sender_id] => 21 
       [booking_id] => 3 
       [unread] => 0 
       [created] => 2013-04-15 15:01:12 
      ) 

    ) 

) 

Спасибо заранее.

+0

выше код будет сортировать только сообщение. не заказывайте – liyakat

+0

Просьба уточнить - очень сложно определить, что задают. – Dave

+0

@YogeshSaroya Есть ли у вас связь между Booking and Message? По звукам этого, вероятно, вы хотите, чтобы база данных делала для вас, а не вручную в PHP? –

ответ

0

Вариант № 1: Создайте третью модель под названием «BookingAndMessage». Вы можете использовать метод модели afterSave (как при бронировании, так и в сообщении), чтобы создать дублирующую запись в вашей новой модели. Затем вы можете запросить OrderAndMessage в правильном порядке сортировки.

Вариант № 2: Для того, чтобы решить эту проблему, так как она стоит, вы хотите использовать usort функцию PHP (также описано здесь PHP Sort a multidimensional array by element containing date).

<?php 

$BookingsAndMessages = array_merge($bookings, $messages); 

function date_compare($a, $b) 
{ 
    $modelKeyA = array_key_exists('Booking',$a) ? 'Booking' : 'MessageDetail'; 
    $modelKeyB = array_key_exists('Booking',$b) ? 'Booking' : 'MessageDetail'; 
    $t1 = strtotime($a[$modelKeyA]['created']); 
    $t2 = strtotime($b[$modelKeyB]['created']); 
    return $t1 - $t2; 
} 

usort($BookingsAndMessages, 'date_compare'); 
// Would sort the merged records by `created` date 
?> 

Недостатком варианта 2 является то, что вам нужно будет создавать правила для каждого поля (и направления сортировки).

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