Laravel incluye un mapeador objeto-relacional (ORM) llamado Eloquent.
Eloquent simplifica la interacción con la base de datos e implementa el patrón ActiveRecord.Con Eloquent, defines una clase “modelo” por cada tabla de la base de datos.
A través del modelo puedes obtener, insertar, actualizar y eliminar registros.
Antes de usar Eloquent, configura la conexión a la base de datos en config/database.php.
Por defecto se usan las variables DB_* del archivo .env.
Por defecto Eloquent gestiona automáticamente las columnas created_at y updated_at.
Si añades $table->timestamps() en la migración, se rellenan solas al guardar o actualizar.Para desactivarlo, pon $timestamps a false.
class Post extends Model{ public $timestamps = false;}
Al contrario, $guarded indica columnas no asignables.
class Post extends Model{ // Protege solo la clave primaria y permite el resto protected $guarded = ['id'];}
Si $guarded es un array vacío se permite la asignación a todas las columnas.
Al pasar directamente entrada del usuario hay riesgo de sobrescribir columnas no previstas, así que se recomienda usar $fillable con las columnas permitidas explícitas.
Controlador que opera sobre la tabla posts creada mediante migración.
<?phpnamespace App\Http\Controllers;use App\Models\Post;use Illuminate\Http\RedirectResponse;use Illuminate\Http\Request;use Illuminate\View\View;class PostController extends Controller{ // Muestra la lista de posts public function index(): View { $posts = Post::where('published', true) ->latest() ->get(); return view('posts.index', ['posts' => $posts]); } // Crea un post 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'); } // Actualiza un post 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'); } // Elimina un post public function destroy(Post $post): RedirectResponse { $post->delete(); return redirect('/posts'); }}
Al escribir Post $post como argumento del método, Laravel resuelve automáticamente el modelo desde el parámetro de la ruta (route model binding).
Ya no necesitas escribir Post::findOrFail($id) a mano.