Laravel中的路由、控制器和Eloquent ORM的基本用法是什么?

Laravel中的路由、控制器和Eloquent ORM基本用法详解

一、路由(Routing)

Laravel的路由系统是连接用户请求与应用程序逻辑的核心组件,支持灵活的定义方式和丰富的功能。

 1.基本路由定义

路由定义在routes/web.php(Web界面)和routes/api.php(API接口)中,支持闭包或控制器方法绑定。例如:

// 闭包形式
Route::get('/hello', function () {
    return 'Hello, World!';
});

// 绑定控制器方法
Route::get('/user', 'UserController@index');

支持常见的HTTP方法:getpostputpatchdeleteoptions,以及match(指定多个方法)和any(响应所有方法)。

2.路由参数

动态参数通过{param}语法捕获,支持必选、可选参数及正则约束:

// 必选参数
Route::get('/user/{id}', function ($id) { return "User ID: $id"; });

// 可选参数(需设置默认值)
Route::get('/user/{name?}', function ($name = 'Guest') { return "Hello, $name"; });

// 正则约束
Route::get('/user/{id}', function ($id) { ... })->where('id', '\d+');

参数验证可通过where方法实现。

3.命名路由与URL生成

为路由命名便于生成URL或重定向:

Route::get('/dashboard', function () { ... })->name('dashboard');

// 生成URL
$url = route('dashboard');
// 重定向
return redirect()->route('dashboard');

命名需唯一,避免冲突。

4.路由组(Route Groups)

通过共享属性(如中间件、前缀、子域名)简化路由定义:

Route::prefix('admin')->middleware('auth')->group(function () {
    Route::get('/users', 'AdminController@users'); // 实际路径:/admin/users
});

支持嵌套分组和子域名路由。

5.模型绑定(Route Model Binding)

自动将Eloquent模型实例注入路由参数:

Route::get('/user/{user}', function (User $user) { return $user->email; });
  1. 支持隐式绑定、自定义键及软删除模型查询。


二、控制器(Controllers)

控制器用于封装业务逻辑,遵循MVC模式,提升代码可维护性。

1.创建控制器

使用Artisan命令生成控制器文件:

php artisan make:controller UserController

添加--resource参数可生成RESTful风格的方法(如indexstore等)。

2.绑定路由到控制器

在路由文件中指定控制器方法:

Route::get('/users', 'UserController@index');
Route::post('/users', 'UserController@store');

支持直接绑定或通过资源路由(Route::resource)自动映射。

3.资源控制器(Resource Controllers)

快速生成CRUD操作路由:

Route::resource('photos', 'PhotoController');
  1. 生成的路由包括:

    • GET /photos → index
    • GET /photos/create → create
    • POST /photos → store
    • GET /photos/{photo} → show
    • 其他如editupdatedestroy等。

4.中间件与依赖注入

中间件可在控制器构造函数或路由中应用:

class UserController extends Controller {
    public function __construct() {
        $this->middleware('auth')->except('index');
    }
}
  1. 支持通过构造函数或方法注入依赖(如Request、Repository)。


三、Eloquent ORM

Eloquent是Laravel的ActiveRecord实现,提供优雅的数据库操作接口。

1.模型定义与约定

模型类继承Illuminate\Database\Eloquent\Model,默认表名为类名复数形式(如User对应users表):

class User extends Model {
    protected $table = 'custom_users'; // 自定义表名
    protected $primaryKey = 'user_id'; // 自定义主键
    public $timestamps = false; // 禁用时间戳
}

使用Artisan命令生成模型及迁移文件:

php artisan make:model User -m

2.CRUD操作

查询

$users = User::all(); // 获取所有记录
$user = User::find(1); // 通过主键查找
$activeUsers = User::where('status', 'active')->orderBy('name')->get();

插入

$user = User::create(['name' => 'John', 'email' => 'john@example.com']);
// 或
$user = new User;
$user->name = 'John';
$user->save();

更新

$user = User::find(1);
$user->update(['name' => 'Jane']);

删除

User::destroy(1); // 通过主键删除
$user->delete(); // 删除实例

3.关系管理

Eloquent支持多种关系类型,通过方法定义:

一对一

class User extends Model {
    public function phone() {
        return $this->hasOne(Phone::class);
    }
}

一对多

class Post extends Model {
    public function comments() {
        return $this->hasMany(Comment::class);
    }
}

多对多

class User extends Model {
    public function roles() {
        return $this->belongsToMany(Role::class);
    }
}

支持hasOnehasManybelongsTobelongsToMany及多态关系。

4.软删除与作用域

软删除:添加deleted_at字段,模型中使用SoftDeletes trait:

use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model {
    use SoftDeletes;
}

删除时设置deleted_at,查询默认排除软删除记录,可用withTrashed()包含。

作用域:封装常用查询条件:

class User extends Model {
    public function scopeActive($query) {
        return $query->where('status', 'active');
    }
}
// 使用作用域
$activeUsers = User::active()->get();
四、总结
  • 路由:通过闭包或控制器方法处理请求,支持参数、分组、模型绑定等高级特性。
  • 控制器:封装业务逻辑,支持资源路由、中间件和依赖注入,提升代码组织性。
  • Eloquent ORM:以面向对象方式操作数据库,简化CRUD和关系管理,集成软删除、作用域等功能。

以上机制共同构成Laravel高效开发的核心,开发者可根据需求灵活组合使用,构建结构清晰、维护性强的Web应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破碎的天堂鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值