Framework W :: Documentation

Light & powerful PHP framework

Les modèles

À quoi servent les modèles ?

Les modèles (ou Model) sont les classes responsables d'exécuter les requêtes à votre base de données.

Concrètement, chaque fois que vous souhaitez faire une requête à la base de données, vous devriez venir y créer une fonction qui s'en chargera (sauf si elle existe déjà dans les modèles de base du framework).

Comment créer un nouveau modèle ?

Dans votre application, vous pourriez avoir un modèle par table MySQL (sans obligation). Chacune de ces classes devraient hériter de \W\Model\Model, le modèle de base du framework, qui vous fera profiter de quelques méthodes utiles pour les requêtes simples à la base de données.

Par exemple, pour créer un modèle relié à une table commentaires nommée comment :

<?php /* app/Model/CommentModel.php */
namespace Model;

use \W\Model\Model;

class CommentModel extends Model
{
	//Récupère les commentaires associés à un article
	public function findPostComments($postId)
	{
		//...
	}
}

Le nom de la table MySQL correspondante sera automatiquement définit en fonction du nom du modèle transformé en underscore_case (snake_case). Par exemple, si le modèle s'appelle CommentsBlogModel, celui-ci cherchera une table nommée comments_blog.

Il est toutefois possible de définir un nom de table manuellement à l'aide de la fonction $this->setTable('nom_de_table'); existante dans \W\Model\Model


Les propriétés et méthodes héritées du Model

Voici les propriétés et les méthodes les plus utiles, héritées du modèle de base. Vous devrez créer vos propres méthodes pour réaliser toutes les requêtes SQL plus complexes !

/* W/Model/Model.php */

// Propriété contenant le nom de la table (deviné grâce au nom de votre modèle)
protected $table;

// Propriété contenant le nom de la clé primaire de la table (par défaut : 'id')
protected $primaryKey;

// Connexion à la base de données
protected $dbh;

// Définit le nom de la table (si le nom déduit ne convient pas)
public function setTable($table)

// Définit le nom de la clé primaire de la table (si ce n'est pas 'id')
public function setPrimaryKey($primaryKey)

// Récupère une ligne de la table en fonction d'un identifiant
public function find($id)

// Récupère toutes les lignes de la table
public function findAll($orderBy = '', $orderDir = 'ASC', $limit = null, $offset = null)

// Récupère une ligne de la table en fonction d'une colonne et sa valeur
public function findBy($column = '', $value = '')

// Récupère toutes les lignes de la table en fonction d'une colonne et sa valeur
public function findAllBy($column = '', $value = '', $orderBy = '', $orderDir = 'ASC', $limit = null, $offset = null)

// Effectue une recherche
// Le premier argument est un tableau associatif où la clé correspond à la colonne SQL
// Le second argument est l'opérateur OR ou AND pour la recherche
public function search(array $search, $operator = 'OR')

// Efface une ligne en fonction de son identifiant
public function delete($id)

// Ajoute une ligne
// Le premier argument est un tableau associatif de valeurs à insérer
// Retourne les données insérées (avec l'identifiant)
public function insert(array $data, $stripTags = true)

// Modifie une ligne en fonction d'un identifiant
// Le premier argument est un tableau associatif de valeurs à insérer
// Le second est l'identifiant de la ligne à modifier
// Retourne les données mises à jour
public function update(array $data, $id, $stripTags = true)

// Retourne l'identifiant de la dernière ligne insérée
public function lastInsertId()

Le cas spécifique du UsersModel

Puisque W a besoin lui-même d'un modèle d'utilisateur, pour les fonctionnalités de sécurité, et puisque W connait les détails de votre table d'utilisateurs, vous pouvez avoir accès à quelques méthodes supplémentaires en faisant en sorte que votre modèle d'utilisateur hérite non pas du \W\Model\Model, mais plutôt du \W\Model\UsersModel. Cette classe hérite elle-même du modèle de base.

Voici les méthodes que vous fournit le \W\Model\UsersModel :

/* W/Model/Model.php */

// Hérite de toutes les méthodes du Model, plus : 

// Récupère un utilisateur en fonction de son email ou de son pseudo
public function getUserByUsernameOrEmail($usernameOrEmail)

// Teste si un email est présent en base de données
public function emailExists($email)

// Teste si un pseudo est présent en base de données
public function usernameExists($username)