Laravel inclut Eloquent, un ORM (object-relational mapper).
Eloquent facilite le dialogue avec la base et implémente le pattern ActiveRecord.Avec Eloquent, vous créez une classe « modèle » pour chaque table de la base.
Le modèle permet de récupérer, insérer, mettre à jour et supprimer des enregistrements.
Avant d’utiliser Eloquent, configurez la connexion dans config/database.php.
Par défaut, les variables DB_* du .env sont utilisées.
Par défaut, Eloquent gère automatiquement created_at et updated_at.
Ajoutez $table->timestamps() à la migration pour bénéficier du remplissage automatique lors des enregistrements et mises à jour.Pour désactiver cette gestion automatique, mettez $timestamps à false.
class Post extends Model{ public $timestamps = false;}
À l’inverse, $guarded indique les colonnes interdites.
class Post extends Model{ // Seule la clé primaire est protégée, le reste est autorisé protected $guarded = ['id'];}
Un $guarded vide autorise l’assignation de toutes les colonnes.
Si vous passez directement des données utilisateur, des colonnes non prévues risquent d’être modifiées. Préférez lister explicitement les colonnes autorisées avec $fillable.
Exemple de contrôleur pour la table posts créée par une migration.
<?phpnamespace App\Http\Controllers;use App\Models\Post;use Illuminate\Http\RedirectResponse;use Illuminate\Http\Request;use Illuminate\View\View;class PostController extends Controller{ // Liste des publications public function index(): View { $posts = Post::where('published', true) ->latest() ->get(); return view('posts.index', ['posts' => $posts]); } // Création public function store(Request $request): RedirectResponse { $validated = $request->validate([ 'title' => ['required', 'string', 'max:255'], 'body' => ['required', 'string'], 'published' => ['boolean'], ]); Post::create([ ...$validated, 'user_id' => $request->user()->id, ]); return redirect('/posts'); } // Mise à jour public function update(Request $request, Post $post): RedirectResponse { $validated = $request->validate([ 'title' => ['required', 'string', 'max:255'], 'body' => ['required', 'string'], ]); $post->update($validated); return redirect('/posts'); } // Suppression public function destroy(Post $post): RedirectResponse { $post->delete(); return redirect('/posts'); }}
Type-hinter Post $post dans une méthode de contrôleur active le route model binding : Laravel récupère automatiquement le modèle depuis le paramètre de route.
Vous n’avez plus besoin d’écrire vous-même Post::findOrFail($id).