Изменить SQL-запрос на запрос CakePHP

#mysql #sql #cakephp

#mysql #sql #cakephp

Вопрос:

Приведенный ниже запрос, который я хотел преобразовать в Cakephp, может кто-нибудь мне помочь.

 SELECT S.name, (sum(El.amount) - (EE.total - EE.Returned_equipment)) As "Leftover", EE.equipment_id, sum(EL.amount), EQ.type 
From States S 
Inner Join events EV ON S.id = EV.state_id 
Inner Join equipment_events EE ON EE.event_id = EV.id 
Inner Join equipment_locations EL On EL.equipment_id = EE.equipment_id 
Inner Join equipment EQ On EQ.id = EE.equipment_id 
Inner Join events E2 ON E2.location_id = EL.location_id
Inner Join locations L On L.state_id = S.id
Where EE.Bool_value = "Open" Group BY EE.equipment_id, S.name
  

Комментарии:

1. Пожалуйста, помечайте свой вопрос только теми тегами, которые действительно актуальны, т. Е. Помечайте их версией CakePHP, которую вы фактически используете, 2.x и 3.x сильно отличаются. Также, пожалуйста, всегда показывайте, что вы уже пробовали, и с какой частью проблемы вы боретесь конкретно (с точки зрения программирования)!

Ответ №1:

В CakePHP 3 попробуйте что-то вроде этого:

     use CakeORMTableRegistry;

    $query = TableRegistry::getTableLocator()->get('S', ['table' => 'States'])->find();
    
    $sumElAmount = $query->func()->sum('El.amount');
    
    $query->select(['S.name']);
    $query->select(['Leftover' => $sumElAmount - 'EE.total - EE.Returned_equipment']);
    $query->select(['EE.equipment_id']);
    $query->select([$sumElAmount]);
    $query->select(['EQ.type']);
    $query->where(['EE.Bool_value' => 'Open']);
    $query->join([
        'EV' => [
            'table' => 'events',
            'type' => 'INNER',
            'conditions' => ['S.id = EV.state_id'],
        ],
        // add more inner joins
    ]);
    $query->group(['EE.equipment_id', 'S.name']);

    $this->set('results', $query);
  

И прочитайте:

https://book.cakephp.org/3/en/orm/query-builder.html