on Dec 10th, 2008ORM & Kedjade metodanrop i PHP

Jag satt för en tid sedan och började bygga på ett eget ORM-framework, och funderade på olika lösningar för att bygga upp sql-satserna. Det jag kom fram till blev slutligen:

<?php
Class Query
{
    private $sql;
   
    public function getSql()
    {
        return $this->sql;
    }
   
    public function select($what)
    {
        $this->sql = ‘SELECT ‘ . implode(func_get_args(), ‘, ‘);
        return $this;
    }
   
    public function from($where)
    {
        $this->sql .= ‘ FROM ‘ . implode(func_get_args(), ‘, ‘);
        return $this;
    }
   
    public function limit($start, $limit)
    {
        $this->sql .= ‘ LIMIT ‘ . $start . ‘,’ . $limit;
        return $this;
    }
   
    public function group($what)
    {
        $this->sql .= ‘ GROUP BY ‘ . $what;
                return $this;
    }
   
    public function join($table, $key)
    {
        $this->sql .= ‘ LEFT JOIN ‘ . $table . ‘ USING(‘ . $key . ‘)’;
        return $this;
    }
   
    public function __toString()
    {
        return $this->sql;
    }
}

$q = new Query;

$q->select(‘this’)->from(‘that’)->group(‘this’)->limit(0, 10);

echo $q;
?>
 

vilket kommer att skriva ut
SELECT this FROM that GROUP BY this LIMIT 0,10

Hemligheten bakom detta är att man returnerar $this i varje metod, vilket gör att man kan kedja kommandon, mycket smidigt!

Finns intresse kommer jag antagligen släppa hela versionen av mitt ORM här på Iocore om ett tag..

2 kommentarer till “ORM & Kedjade metodanrop i PHP”

  1. Jens Törnellon 10 Dec 2008 at 18:35:57

    Gör inte det här saken krångligare?

  2. Alexander Nyquiston 10 Dec 2008 at 22:49:05

    Jens: Njäe det kan jag inte påstå.

    Kodar man enligt MVC är det väldigt smidigt att ställa frågor mot modellen på detta vis.

    Implementerar man sedan stöd för PDO har du helt plötligt stöd för oerhört många olika typer av datakällor.

RSS

Lämna en kommentar