Is it possible to use SQL Server's OUTER APPLY with Codeignter's Active Record?
            Asked
            
        
        
            Active
            
        
            Viewed 650 times
        
    2
            
            
         
    
    
        Tom
        
- 12,776
- 48
- 145
- 240
- 
                    Not sure about APPLY but you can do OUTER join.. like: $this->db->join('table', 'table.id = table2.id', 'outer'); – Ilanus Jan 18 '16 at 12:55
- 
                    Yeah, I've used join plenty of times, but in this case I need to use APPLY. Might need to get creative with this... – Tom Jan 18 '16 at 12:57
2 Answers
1
            
            
        Not possible. For using Cross Apply or Outer Apply, you need to add a specific function in the file system\database\DB_query_builder.php
that being said, you can add this function (modified from join one) to said file:
public function apply($table, $type = '', $escape = NULL){
    if ($type !== '')
    {
        $type = strtoupper(trim($type));
        if ( ! in_array($type, array('CROSS', 'OUTER'), TRUE))
        {
            $type = 'CROSS';
        }
    }
    else{
        $type = 'CROSS';
    }
    // Extract any aliases that might exist. We use this information
    // in the protect_identifiers to know whether to add a table prefix
    $this->_track_aliases($table);
    is_bool($escape) OR $escape = $this->_protect_identifiers;
    // Do we want to escape the table name?
    if ($escape === TRUE)
    {
        $table = $this->protect_identifiers($table, TRUE, NULL, FALSE);
    }
    // Assemble the APPLY statement
    $this->qb_join[] = $join = $type.' APPLY '.$table;
    if ($this->qb_caching === TRUE)
    {
        $this->qb_cache_join[] = $join;
        $this->qb_cache_exists[] = 'join';
    }
    return $this;
}
And then, you can using it like
$this->db->apply('(select * from table_a where table_a.id=table_z.fk_id) as tmp_table');
or something more complete like
$this->db->apply('(select * from table_a where table_a.id=table_z.fk_id) as tmp_table','outer',false);
 
    
    
        mjosephabie
        
- 11
- 3
0
            
            
        You can do it by
$this->db->join('comments', 'comments.id = blogs.id', 'outer');
Or
$this->db->query("SELECT column_name(s)
    FROM table1
    FULL OUTER JOIN table2
    ON table1.column_name=table2.column_name;");
Codeigniter Query Builder and OUTER APPLY example
Possible joins with Codeigniter
(associate with this $this->db->join('comments', 'comments.id = blogs.id', 'outer');)
- left
- right
- outer
- inner
- left outer
- right outer
 
    
    
        Community
        
- 1
- 1
 
    
    
        Abdulla Nilam
        
- 36,589
- 17
- 64
- 85
