Laravel 中的 Eloquent 和数据库身份验证驱动程序有什么区别

Ach*_*dja 3 php database authentication laravel

在 Laravel 中,在 config/auth.php

我们默认有这个

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],
Run Code Online (Sandbox Code Playgroud)

我的问题是这两个驱动程序之间什么区别?如果我将驱动程序更改为database是否意味着我不能再使用 eloquent 了?

bis*_*hop 5

有一个区别:eloquent在表上使用 ORM 抽象,而database使用直接 SQL 查询。如果您打算拥有一个自定义的 Auth 类,那么 ORM 抽象更容易扩展。如果您(只有表格并且您不打算扩展您的 Auth 层)或(您不将 Eloquent 用于其他任何用途),那么数据库是一个不错的选择。

这种差异的技术原因很微妙,也许令人惊讶:基于 Laravel 的应用程序不需要使用 Eloquent ORM。在这种用法中,应用程序可能仍然希望使用 Laravel 提供的 Authentication facade,因此 Laravel 需要一种不同的方式来存储和检索身份验证数据:因此是数据库驱动程序。

Laravel 文档

如果您的应用程序没有使用 Eloquent,您可以使用使用 Laravel 查询构建器的数据库身份验证驱动程序。

大多数基于 Laravel 的应用程序使用 Eloquent,因此默认使用 Eloquent Auth 类。如果您将驱动程序更改为database,您仍然可以在您的应用程序中使用 Eloquent,尽管我无法想象这种组合的用例。