Kontynuujemy zagadnienia bazodanowe. Tym razem – budujemy nasz model. Do dzieła.

Wracamy do lekcji poprzedniej i tniemy wszystko poniżej tego kodu:

//(...)
$conn = new PDOConnection();
$conn->connect();
$conn = $conn->getConnection();

Okej, budujemy klasę abstrakcyjną Model:

abstract class Model {

    protected $tablename;
    protected $keys;
    protected $conn;

    public function setConn($conn)
    {
        $this->conn = $conn;
    }

    public function keysString(){
        return "(" . implode(", ", $this->keys) . ")";
    }

    public function valuesString(){
        $values = array_map(fn($k) => ":$k", $this->keys);
        return "(" . implode(", ", $values) . ")";
    }

    abstract public  function insert($data);

}

Jeszcze to przeorganizujemy. Na razie jednak piszemy klasę pochodną:

class PersonModel extends Model {

    protected $tablename = 'people';
    protected $keys = ['name', 'age'];

    public function insert($data){
        echo "INSERT INTO {$this->tablename} {$this->keysString()} VALUES {$this->valuesString()}";
        echo "<br>";
        print_r($data);
    }
}

Zobaczmy, jak to działa:

$person = new PersonModel();
$person->insert(['name' => 'Jane', 'age' => 20]);
//INSERT INTO people (name, age) VALUES (:name, :age)
//Array ( [name] => Jane [age] => 20 )

Jesteśmy całkiem blisko napisania naszego modelu. Ciąg dalszy w następnej lekcji.