2016-10-11 2 views
0

У меня есть рабочий SQL-запрос, который я хочу выяснить, каков был бы эквивалент CakePHP-запроса для работы точно так же?cakephp join из отсортированного и ограниченного ряда

SELECT customers.*, customer_reps.created FROM customers 
LEFT JOIN customer_reps ON customer_reps.id = 
    (
    SELECT id FROM customer_reps WHERE customer_id = customers.id 
    ORDER BY id ASC LIMIT 1 
    ) 
WHERE created >= 1475298000 
AND created <= 1476217836 
AND agents_id = 4 

Поэтому в основном я выбрать все столбцы из «клиентов», а затем я хочу только «создать» временную метку поля первой таблицы «customer_reps» для согласования клиента.

Документация по CakePHP, похоже, не объясняет, как сделать выбор внутри select для сортировки как это. Я попытался использовать реляционный материал hasMany, но я не смог найти, как просто получить «первую» запись customer_reps, чтобы добавить к основному запросу для использования в предложении WHERE.

Благодаря

ответ

0

попробовать этот код в качестве отправной точки нужно просто сгруппировать его по CustomerRep.customer_id, потому что заказ уже по возрастанию, если вы customer_reps идентификатор таблицы автоматически увеличивается уже

$this->Customer->find('all', array(
     'fields' => arrray(
      'Customer.*', 
      'CustomerRep.created' 
      ), 
     'joins' => array(
      array(
       'type' => 'LEFT', 
       'table' => 'customer_reps', 
       'alias' => 'CustomerRep', 
       'conditions' => 'Customer.id = CustomerRep.customer_id' 
       ) 
      ) 
     'conditions' => array(
      'Customer.created >=' => '1475298000', 
      'Customer.created <=' => '1476217836', 
      'Customer.agentds_id' => 4 
      ), 
     'group' => 'CustomerRep.customer_id' 
    )); 
0

Вы знакомы с cakephp query builder? затем, если да, вы должны понимать этот поток

Шаг 1: SELECT customers.*, customer_reps.created FROM customers эквивалент в CakePHP является

$this->Customer->find('all', array(
    'fields' => array(
     'Customer.*', 
     'CustomerReply.created' 
    ) 
); 

Примечание: CustomerReply.created от присоединиться таблицу customer_reps, которую я просто псевдоним CustomerReply

Шаг 2: LEFT JOIN customer_reps ON customer_reps.id = ( SELECT id FROM customer_reps WHERE customer_id = customers.id ORDER BY id ASC LIMIT 1 ) эквивалент в коктейле

'joins' => array(
    array(
     'table' => 'customer_reps', 
     'type' => 'left', 
     'alias' => 'CustomerReply', 
     'conditions' => array(
      'CustomerReply.id = (SELECT id FROM customer_reps WHERE customer_id = Customer.id ORDER BY id ASC LIMIT 1)' 
     ) 
    )) 

Этап 3: WHERE created >= 1475298000 AND created <= 1476217836 AND agents_id = 4 эквивалент в CakePHP является

'conditions' => array(
      'Customer.created >=' => 1475298000, 
      'Customer.created <=' => 1476217836, 
      'Customer.agents_id' => 4 
      ) 
     ); 

так что ваш CakePHP конструктор запросов будет так

$query = $this->Customer->find('all', array(
    'fields' => array(
     'Customer.*', 
     'CustomerReply.created' 
     ), 
    'joins' => array(
     array(
      'table' => 'customer_reps', 
      'type' => 'left', 
      'alias' => 'CustomerReply', 
      'conditions' => array(
       'CustomerReply.id = (SELECT id FROM customer_reps WHERE customer_id = Customer.id ORDER BY id ASC LIMIT 1)' 
      ) 
     )), 
    'conditions' => array(
     'Customer.created >=' => 1475298000, 
     'Customer.created <=' => 1476217836, 
     'Customer.agents_id' => 4 
     ) 
    )); 
Смежные вопросы