Bonjour à vous,

J'aurais une question concernant les fonctions que nous avons faites dans les précèdent tutoriels, soit la function find. Serait-ce possible de lié les tables à l'aide d'une jointure ? Du genre faire un tableau ayant, en premier paramètre la table voulu, en second paramètre, la colonne de référence et en troisième la colonne étrangère (de la table). En faite, je m'imaginerais d'ajouter une condition dans la function find qui serait genre :

if(isset($req'join'])) {
            $req'join'] = array($keyTable, $keyEntré, $keySorti);
            if(is_array($v))
                $sql .= 'JOIN '.$keyTable.' ON '.$keyEntré.'= '.$keySorti;          
        }

Quelqu'un pourrait m'éclairer ? :)

Merci beaucoup et bonne journée.

Cordialement,
Ramz.

3 réponses


ksta
Réponse acceptée

salut Ramz1994,
je sais pas si cela peut t'aider (je n'est pas mi le tableau dans le model mais dans le controller, ici la variable $join avec tes nom de variable):

<?php 
class PostsController extends Controller{

    /**
    * Blog, liste les articles
    **/
    function index(){
        $perPage = 10; 
        $this->loadModel('Post');
        $condition = array('online' => 1,'type'=>'post');
        $join=array('keyTable'=>'categories as Category',
            'keyEntrer'=>'Category.id',
            'keySortie'=>'=Post.category_id'
        );
        $d'posts'] = $this->Post->find(array(
            'conditions' => $condition,
            'fields' => 'Post.id,Post.name,Post.slug,Post.created,Category.name as catname,Post.content,Category.slug as catslug',
            'order' => 'created DESC',
            'limit' => ($perPage*($this->request->page-1)).','.$perPage,
            //'join' => array('categories as Category'=>'Category.id=Post.category_id')
            'join' => $join
        ));
        $d'total'] = $this->Post->findCount($condition); 
        $d'page'] = ceil($d'total'] / $perPage);
        $d'categories'] = $this->Post->find(array(
            'order' => 'id DESC',
        ),'categories');
        $this->set($d);
    }

et dans le Model.php j'ai modifier la condition de $req'join'] par sa :

// Liaison
    if(isset($req'join'])){
    if (isset($req'join']'keyTable'])) {
        $sql .= 'LEFT JOIN '.$req'join']'keyTable'].' ON '.$req'join']'keyEntrer'].$req'join']'keySortie'].' '; 
    }else{
        foreach($req'join'] as $k=>$v){
        $sql .= 'LEFT JOIN '.$k.' ON '.$v.' '; 
        }
    }
    }

je ne sait pas si c'est propre mais c se que j'ai trouvé pour le moment :-)

ps:veuillez m'excusez d'avance de mes erreurs ou de mon ignorance, je suis junior :-)

WebMaster pour 123plantes

Ramz1994
Auteur

Bonjour,

Je viens tout juste de voir le message (email). Tout d'abord, merci pour la réponse. J'ai d'ailleurs fait un truc semblable hier soir. :)

Par contre, débutant que je suis, mon truc est fonctionnel pour une seule liaison. Cela dit, ce n'est pas terminé et il y a quels trucs vraiment inutiles le array sur mon join (étant donné que je ne fais qu'une seul liaison). Ta méthode semble pas mal, je n'avais pas vraiment vu la chose comme ça.

$sql .= ' FROM '.$this->table.' as '.get_class($this).'';
if(isset($req'join'])){
            $sql .= ' INNER JOIN ';
            if (!is_array($req'join'])) 
                $sql .= $req'join'].' as '.ucfirst(rtrim($req'join'], 's'));
            else {
                $join = array();
                foreach ($req'join'] as $k => $v) {
                    $join] = "$v as ".ucfirst(rtrim($v, 's'));
                }
                $sql .= implode(' JOIN ', $join);
            }
                if(isset($req'on'])){
                    $sql .= ' ON ';
                    $on = array();
                    if (is_array($req'on'])) {
                        $sql .= $req'on'][0]." = ".$req'on'][1];
                    }
                }
            }

Félicitation pour ton site web, tu me sembles plutôt bien avoir réussit. Bonne chance à toi dans tes futurs expériences et encore merci.

Cordialement,
Ramz.

Bonjou,
Si sa à pu t'aider je suis contant :-) mais je suis comme toi :-) je débute dans le métier donc je sais pas tous mais je me débrouille grâce à mon BTS et bien entendu grafikart (que je remercie pour ces excellents TUTO) et d'autre site :-).

merci pour les félicitation mais je ne peut pas trop les accepter :-) car lors de mon arrivé a l'entreprise, il à déjà été réalisé et il à été fait avec prestashop qui ne demande pas beaucoup de connaissance en programmation :-).

J'ai pour mission de faire des site annexe ou de crée des modules pour Prstashop donc j'ai appris le MVC grâce à Grafikart et d'autre site pour ensuite m'attaquer à symfony car même maintenant j'ai encor du mal avec prestashop :-)

mais je suis contant d'avoir pu t'aider :-, bonne continuation à toi aussi.

Coordialement,
Ksta

ps:veuillez m'excusez d'avance de mes erreurs ou de mon ignorance, je suis junior :-)

WebMaster pour 123plantes