#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);
И прочитайте: