public function getProgramms() { //todo извлекать одним запросом. $programms = $this->getArray(' SELECT g.id_gym_programm AS id_prog, g.name AS prog_name, g.description AS prog_descr, e.id_gym_programm_exercise AS id_prog_ex, e.id_gym_ex, if(e.name is null, ex.name, e.name) AS ex_name, e.description AS ex_descr, s.value as set_val FROM gym_programm g, gym_programm_exercises e LEFT JOIN gym_exercises ex ON ex.id_gym_ex = e.id_gym_ex LEFT JOIN gym_sets s ON s.id_gym_programm_exercise = e.id_gym_programm_exercise WHERE g.id_gym_programm = e.id_gym_programm ORDER BY g.id_gym_programm ASC, e.n_order ASC, s.n_order ASC'); $progData = array(); $curProg = null; foreach ($programms as $prog) { $progId = (int) $prog['id_prog']; if (!$curProg || $curProg->getId() != $progId) { $curProg = new GymProgramm(array_sift_out($prog, array('id_prog' => 'id', 'prog_name' => 'name', 'prog_descr' => 'comment'))); $progData[] = $curProg; } $progExId = (int) $prog['id_prog_ex']; $ex = $curProg->getExercise($progExId); if (!$ex) { $ex = new GymProgrammEx(array_sift_out($prog, array('id_gym_ex' => 'id', 'ex_name' => 'name', 'ex_descr' => 'comment'))); $curProg->addExercise($progExId, $ex); } if (!isEmptyInArray('set_val', $prog)) { $ex->addSet($prog['set_val']); } } return $progData; }
<?php require_once 'AjaxTools.php'; $data = RequestArrayAdapter::inst()->arr('programm'); if ($data) { $programm = new GymProgramm($data); if ($programm->hasExercises()) { $programmId = GymManager::getInstance()->saveProgramm($programm); json_success($programmId); } else { json_error('Программа не содержит ни одного упражнения'); } } else { json_error('Не переданы данные'); }