Bonjour à tous, je veux comprendre à quoi sert Model avec Getters & Setters et pourqoui utliser ?
Je programme depuis 3 ans mais toujours dans mon Model j'utilise juste des Functions (Insert,Update,delete,getByID....).
théoriquement (Dans les Exams :D) je compends comment utiliser Getters & Setters mais dans la réalité j'utilise pas.
je veux un exemple concret d'utilisation : Getters & Setters.

voila comment j'utilise le Model juste des Functions (Insert,Update,delete,getByID....)

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

use DB;

class Students extends Model
{
    public static function Insert_student($data){

        DB::table('students')->insert($data);

    }

    public static function IfStudentExist($id_student){

        $result = DB::table('students')->where('id_student', $id_student)->count();
        return $result;

    }

     public static function Update_student($data){
        $id_student = $data['id_student'];
        unset($data['id_student']);
        DB::table('students')->where('id_student', $id_student)->update($data);
     }

     public static function getStudentByID($id_student){

        //$result = DB::table('students')->get();
        $result = DB::table('students')->where('id_student', $id_student)->first();
        return $result;

    }

}
?>

merciiii

2 réponses


SLK
Réponse acceptée

Salut,

Personnellement je n'ai jamais eu besoin de getters/setters dans mes modèles, mais j'imagine que
ça peut arriver d'en avoir besoin.

les getters/setters ne servent que si ta classe a besoin d'un attribut (ou plusieurs).

Ici dans ta classe, tu n'as pas d'attributs, donc pas besoin de getters/setters.

Pour prendre un exemple où tu aurai besoin des getters/setters,
on va dire que dans ton application, dans chaque Session, tu aimerai savoir
combien de fois on "modifie" un "étudiant".

Du coup dans ton modèle d'étudiant (i.e ta classe "Students"),
on va rajouter un attribut "nb_student_updates" (pour "number of student's updates").
Et dans la fonction Update_student on va incrémenter ce nombre.

Et dans un controller, si un moment tu veux connaitre le nombre de fois qu'on
a modifié un étudiant, on va récupérer ce nombre grâce au "getter".

classe Students :

<?php
class Students extends Model
{

    private nb_student_updates = 0; // on déclare un attribut, qu'on initialise à 0

    ...

    public static function Update_student($data) {
        $id_student = $data['id_student'];
        unset($data['id_student']);
        DB::table('students')->where('id_student', $id_student)->update($data);

        /* on incrémente notre attribut.
            Pas besoin d'utiliser de setters/getters ici puisque on est dans la classe */
        $this->nb_student_updates++;
     }

     ...
}
?>

Et dans un controller :
(je ne sais pas comment tu récupères un model, je vais juste l'appeler directement "model_student")

<?php
$nb_student_updates = model_student->get(nb_student_updates);
// ici on a BESOIN du getter (car l'attribut est déclaré "private", et on est en dehors de la classe où est déclaré l'attribut)
?>

C'est un exemple un peu stupide, mais ça devrait suffir pour comprendre l'idée.

Remarque :
Dans cet exemple, on a pas eu besoin d'un "setter" (seulement d'un "getter"), mais dans
d'autres exercices on pourrait avoir besoin de "setters".
J'ai essayé de trouver un exemple concret qui utiliserai un "setter", mais je n'ai pas d'idées.
Peut-être que quelqu'un d'autre en aura une.

Remarque :
Tu peux mettre chaque getter/setter spécifique à chaque attributs dans chaque model...
Mais en général on créer juste un getter général, et un setter général, que tu places dans
la classe "Model", dont tous tes modèles hériteront.

Un truc dans ce style :

<?php
// classe "Model"
public function get($attribute)
{
    if (!isset($this->$attribute))
            return null;
    return $this->$attribute;

    /* On peut racourcir le tout en écrivant juste : "return $this->$attribute ?? null;"
        Mais je voulais garder la même "structure" que le setter) */
}

public function set($attribute, $value)
{
    if (!isset($this->$attribute))
            return false;
    $this->$attribute = $value;
    return true;
}
?>

Remarque :
Attention aux conventions,
on préfère ecrire les noms des méthodes en commençant par une minuscule.

merci bcp SLK,

je trouve ta réponse très utile

Thank you