/** * Return all samples for given $work_order_id and $research_name where $research_name kind of research has been done.; * * @return $samples, Array. Samples->sample->layers->layer-> * sample->researches->research * layer->researches_data->research_data */ //NOTE: Check for MVC violations (li) public function foobar($work_order_id, $research_name) { //TODO: CHECK OUT IF 'SELECT DISTINCT IS A HACK!! $sql = 'SELECT DISTINCT '. 'sample.*, sample_type.name as type ' . 'FROM work_order '. 'JOIN sample ON work_order.id = sample.work_order_id '. 'JOIN sample_type ON sample.sample_type_id = sample_type.id ' . 'JOIN layer ON sample.id = layer.sample_id '. 'JOIN ' . $research_name . '_research ON sample.id = ' . $research_name . '_research.sample_id '. 'WHERE work_order.id = ?'; $samples = $this->db->fetchAll($sql, array($work_order_id)); $sql2 = 'SELECT '. 'sample.id as sample_id , sample.work_order_id as work_order_id, '. 'material.name as material, ' . 'layer.* '. 'FROM work_order '. 'JOIN sample ON work_order.id = sample.work_order_id '. 'JOIN layer ON sample.id = layer.sample_id '. 'JOIN material ON layer.material_id = material.id ' . 'JOIN ' . $research_name . '_research ON sample.id = ' . $research_name . '_research.sample_id '. 'WHERE work_order.id = ?'; $layers = $this->db->fetchAll($sql2, array($work_order_id)); $sql3 = 'SELECT '. 'sample.id as sample_id , sample.work_order_id as work_order_id, '. 'layer.id as layer_id, '. $research_name . '_research_of_layer.* '. 'FROM work_order '. 'JOIN sample ON work_order.id = sample.work_order_id ' . 'JOIN layer ON sample.id = layer.sample_id ' . 'JOIN ' . $research_name . '_research ON sample.id = ' . $research_name . '_research.sample_id '. 'JOIN ' . $research_name . '_research_of_layer ON layer_id = ' . $research_name . '_research_of_layer.layer_id '. 'AND ' . $research_name . '_research.id = ' .$research_name . '_research_of_layer.research_id '. 'WHERE work_order.id = ?'. $researches_of_layer = $this->db->fetchAll($sql3, array($work_order_id)); $sql5 = 'SELECT '. 'sample.id as sample_id , sample.work_order_id as work_order_id, '. $research_name .'_research.* '. 'FROM work_order '. 'JOIN sample ON work_order.id = sample.work_order_id '. 'JOIN ' . $research_name . '_research ON sample.id = ' . $research_name . '_research.sample_id '. 'WHERE work_order.id = ?'; $researches = $this->db->fetchAll($sql5, array($work_order_id)); $sql6 = 'SELECT '. 'sample.id as sample_id , sample.work_order_id as work_order_id, '. 'layer.id as layer_id, '. $research_name .'_research_data.* '. 'FROM work_order '. 'JOIN sample ON work_order.id = sample.work_order_id '. 'JOIN layer ON sample.id = layer.sample_id '. 'JOIN ' . $research_name . '_research_data ON ' . 'layer.id = ' . $research_name . '_research_data.layer_id '. 'WHERE work_order.id = ?'; $researches_data = $this->db->fetchAll($sql6, array($work_order_id)); foreach ($samples as &$sample) { foreach ($researches as $research) { if($sample['id'] == $research['sample_id']) { $sample[$research_name . '_researches'][] = $research; } } foreach ($layers as &$layer) { foreach ($researches_of_layer as $research_of_layer) { //if research_of_layer belongs to layer if ($layer['id'] == $research_of_layer['layer_id']) { //populate the layer $layer[$research_name . '_research_of_layer'][] = $research_of_layer; } } foreach ($researches_data as $research_data) { //if research belongs to layer if ($layer['id'] == $research_data['layer_id']) { //populate the layer $layer[$research_name . '_researches_data'][] = $research_data; } } //if layer belongs to sample if ($sample['id'] == $layer['sample_id']) { //populate the sample $sample['layers'][] = $layer; } } } return $samples; }