Classe sql

Eléphant du PHP | 451 Messages

01 oct. 2011, 13:57

Bonjour,

Alors voilà je me suis crée mon propre mvc et pour faire des requête je fais ainsi:
        $this->loadModel('Posts');
        
        $r = $this->Posts->findFirst(array(
            'conditions' => array('Posts.id' => $id),
            'joins' => array(
                array(
                    'table' => 'users',
                    'type' => 'left',
                    'conditions' => 'Posts.user_id = Users.id'
                ),
                array(
                    'table' => 'level',
                    'type' => 'left',
                    'conditions' => 'Users.lvl_id = Level.id'
                )
             )
        ));
Mais je voudrais savoir si c'est possible de faire comme ceci pour les jointures:
        $this->loadModel('Posts');
        
        $r = $this->Posts->findFirst(array(
            'conditions' => array('Posts.id' => $id),
            'joins' => array(
                    'table' => 'users',
                    'type' => 'left',
                    'conditions' => 'Posts.user_id = Users.id'
             ),
            'joins' => array(
                    'table' => 'level',
                    'type' => 'left',
                    'conditions' => 'Users.lvl_id = Level.id'
             )
        ));
Je voudrais si cela est possible de faire plusieurs tableau joins au lieu de faire plusieurs tableau dans un seul tableau joins.

Voici ma fonction findFirst()
    public function findFirst($d) {
        return current($this->find($d));
    }

    public function find($d = null) {
        if($this->validate) {
            require_once CORE.DS.'libs'.DS.'Validate.php';
            
            $v = new Validate($this->validate);
            $v->_return();
        }
        
        $sql = 'SELECT ';
        
        if(isset($d['fields'])) {
            if(isset($d['join'])) {
                
            }
            
            if(!is_array($d['fields'])) {
                $sql .= $d['fields'];
            } else {
                $sql .= implode(', ', $d['fields']);
            }
        } else {
            $sql .= '*';
        }
        
        $sql .= ' FROM '.$this->table.' as '.get_class($this);
        
        if(isset($d['joins'])) {
            for($i = 0; $i < count($d['joins']); $i++) {
                $sql .= ' '.strtoupper($d['joins'][$i]['type']).' JOIN '.strtolower($d['joins'][$i]['table']).' as '.ucfirst($d['joins'][$i]['table']);
                $sql .= ' ON '.$d['joins'][$i]['conditions'];
            }
        }
        
        if(isset($d['conditions'])) {
            $sql .= ' WHERE ';
            
            if(!is_array($d['conditions'])) {
                $sql .= $d['conditions'];
            } else {
                $cond = array();
                
                foreach ($d['conditions'] as $k => $v) {
                    //if(!is_numeric($v)) {
                        $v = '"'.mysql_escape_string($v).'"';
                    //}
                    
                    $cond[] = "$k = $v";
                }
                
                $sql .= implode(' AND ', $cond);
            }
        }
        
        if(isset($d['limit'])) {
            $sql .= ' LIMIT '.$d['limit'];
            
        }
        
        if(isset($d['order_by'])) {
            $sql .= ' ORDER BY ';
            
        }
        debug($sql);die();
        $pre = $this->db->prepare($sql);
        $pre->execute();
        
        return $pre->fetchAll(PDO::FETCH_OBJ);
    }
    
Merci d'avance.....

ViPHP
xTG
ViPHP | 7331 Messages

01 oct. 2011, 17:46

Ce n'est pas possible car tu auras deux index qui ont la même valeur (joins), seul le dernier existera.

Eléphant du PHP | 451 Messages

01 oct. 2011, 18:14

Ok alors je reste comme j'ai fait merci