Rozbudowa naszego modelu o metodę all, za pomocą której dostaniemy wszystkie elementy. Do dzieła.
Nie będzie to szczególnie trudne:
class PersonModel extends Model {
protected static $tablename = 'people';
protected static $keys = ['name', 'age'];
public static function insert($data){
$table = self::$tablename;
$keys = static::keysString();
$vals = static::valuesString();
$query = "INSERT INTO {$table} {$keys} VALUES {$vals}";
$stmt = static::$conn->prepare($query);
return $stmt->execute($data);
}
public static function all(){
$table = self::$tablename;
$query = "SELECT * FROM $table";
$stmt = static::$conn->prepare($query);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_OBJ);
}
}
A oto efekt:
$person = new PersonModel();
$person->setConn($conn);
$result = $person::all();
foreach( $result as $row ) {
echo $row->name;
echo "<br>";
echo $row->age;
echo "<br>";
}
Możemy jeszcze dodać obsługę typów:
class PersonModel extends Model {
//(...)
public static function all($type=PDO::FETCH_OBJ){
$table = self::$tablename;
$query = "SELECT * FROM $table";
$stmt = static::$conn->prepare($query);
$stmt->execute();
return $stmt->fetchAll($type);
}
}
$person = new PersonModel();
$person->setConn($conn);
$result = $person::all(PDO::FETCH_ASSOC);
foreach( $result as $row ) {
echo $row['name'];
echo "<br>";
echo $row['age'];
echo "<br>";
}
Żeby działało idealnie jak w Laravelu to będziemy musieli jeszcze co najmniej jedną warstwę abstrakcji dodać, ale na razie dopiero się rozkręcamy.