All pastes #675957 Raw Edit

Someone

public text v1 · immutable
#675957 ·published 2007-08-30 17:20 UTC
rendered paste body
    /**
     * 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;
    }