DB_dsql::join PHP Méthode

join() public méthode

Examples: $q->join('address'); // on user.address_id=address.id $q->join('address.user_id'); // on address.user_id=user.id $q->join('address a'); // With alias $q->join(array('a'=>'address')); // Also alias Second argument may specify the field of the master table $q->join('address', 'billing_id'); $q->join('address.code', 'code'); $q->join('address.code', 'user.code'); Third argument may specify which kind of join to use. $q->join('address', null, 'left'); $q->join('address.code', 'user.code', 'inner'); Using array syntax you can join multiple tables too $q->join(array('a'=>'address', 'p'=>'portfolio')); You can use expression for more complex joins $q->join('address', $q->orExpr() ->where('user.billing_id=address.id') ->where('user.technical_id=address.id') )
public join ( string $foreign_table, mixed $master_field = null, string $join_kind = null, string $_foreign_alias = null )
$foreign_table string Table to join with
$master_field mixed Field in master table
$join_kind string 'left' or 'inner', etc
$_foreign_alias string Internal, don't use
    public function join($foreign_table, $master_field = null, $join_kind = null, $_foreign_alias = null)
    {
        // Compatibility mode
        if (isset($this->app->compat)) {
            if (strpos($foreign_table, ' ')) {
                list($foreign_table, $alias) = explode(' ', $foreign_table);
                $foreign_table = array($alias => $foreign_table);
            }
            if (strpos($master_field, '=')) {
                $master_field = $this->expr($master_field);
            }
        }
        // If array - add recursively
        if (is_array($foreign_table)) {
            foreach ($foreign_table as $alias => $foreign) {
                if (is_numeric($alias)) {
                    $alias = null;
                }
                $this->join($foreign, $master_field, $join_kind, $alias);
            }
            return $this;
        }
        $j = array();
        // Split and deduce fields
        list($f1, $f2) = explode('.', $foreign_table, 2);
        if (is_object($master_field)) {
            $j['expr'] = $master_field;
        } else {
            // Split and deduce primary table
            if (is_null($master_field)) {
                list($m1, $m2) = array(null, null);
            } else {
                list($m1, $m2) = explode('.', $master_field, 2);
            }
            if (is_null($m2)) {
                $m2 = $m1;
                $m1 = null;
            }
            if (is_null($m1)) {
                $m1 = $this->main_table;
            }
            // Identify fields we use for joins
            if (is_null($f2) && is_null($m2)) {
                $m2 = $f1 . '_id';
            }
            if (is_null($m2)) {
                $m2 = 'id';
            }
            $j['m1'] = $m1;
            $j['m2'] = $m2;
        }
        $j['f1'] = $f1;
        if (is_null($f2)) {
            $f2 = 'id';
        }
        $j['f2'] = $f2;
        $j['t'] = $join_kind ?: 'left';
        $j['fa'] = $_foreign_alias;
        $this->args['join'][] = $j;
        return $this;
    }

Usage Example

Exemple #1
0
 function join($table, $on, $type = 'inner')
 {
     return parent::join($this->prefix . $table, $alias);
 }
All Usage Examples Of DB_dsql::join