Skip to content

数据库 ​

Laravel使用原生sql、查询构造器、Eloquent ORM 三种方式与数据库交互

查询构造器 ​

用PHP方法操作数据库的工具

php
// 查询构造器
$users = DB::table('users')
    ->where('age', '>', 18)
    ->get();

// 原生sql
SELECT * FROM users WHERE age > 18

Eloquent ORM ​

Laravel 提供的对象关系映射工具,它把 PHP 模型/对象与数据库表/记录建立映射,使我们可以通过 PHP 对象和方法来操作数据库,而不必直接编写大量 SQL

例如

php
$users = User::where('age', '>', 18)->get();

说明:调用User模型类(对应users表)的where静态方法(这个方法由继承自内置的model),where方法内部执行类的实例化操作并返回给对象模型$user(对应user表中age大于18的全部用户)

迁移文件(/migrations) ​

用于创建数据库表结构

例:创建users表,添加id、name、email、created_at、updated_at字段

php
// 2026_09_08_120000_create_users_table.php
return new class extends Migration
{
    // 执行迁移时做什么
    public function up(): void
    {
        // 创建users表,定义字段
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email');
            $table->timestamps();
        });
    }

    // 回滚迁移时做什么
    public function down(): void
    {
        // 如果users表存在,就把他删除
        Schema::dropIfExists('users');
    }
};

迁移操作

bash
# 执行迁移(up函数)
php artisan migrate
# 执行回滚(down函数)
php artisan migrate:rollback

模型工厂(/factories) ​

定义某张表的模拟数据生成规则

例:创建 UserFactory 工厂类,负责定义 User 模型(users表)的模拟数据生成规则

php
class UserFactory extends Factory
{
    // 默认规则
    public function definition(): array
    {
        return [
            'name' => fake()->name(),
            'email' => fake()->safeEmail(),
            'is_admin' => false,
        ];
    }

    // 管理员规则
    public function admin(): static
    {
        return $this->state([
            'is_admin' => true,
        ]);
    }
}

注 definition方法定义的模拟数据生成规则不会自动插入到数据库中,需要执行create方法插入

php
##
// 按 definition 规则生成 1条 users表数据
User::factory()->create()

// 按 definition 规则生成 10条 users表数据
User::factory()->count(10)->create()

// 按 definition+admin 定义的规则,生成 1条 users表数据
User::factory()->admin()->create();

种子数据(/seeders) ​

向数据库填充数据

例:用三种方式填充数据(自定义内容填充管理员用户、按照种子工厂规则填充10个普通用户、在run外定义其他填充规则)

php
class UserSeeder extends Seeder
{
    // 执行数据填充
    public function run(): void
    {
        // 1. 使用如下规则创建模拟数据
        User::create([
            'name' => '管理员',
            'email' => 'admin@example.com',
        ]);

        // 2. 使用 Factory 创建模拟数据
        User::factory()->count(10)->create();

        // 3. 调用其他方法创建模拟数据
        $this->seedSomething();
    }

    // 其他数据填充逻辑。
    private function seedSomething(): void
    {
        // ...
    }
}