4.1 配置数据库

数据库的配置在 config/database.php,如果是本地可以直接配置 .env 文件。

我们通过 .env 文件配置数据库连接的相关信息,以提供给 database 读取。如下所示:

4. 数据库操作 - 图1

然后新建一个链接数据库的控制器 DataController ,来模拟链接数据库的各种操作:

  1. php artisan make:controller DataController

添加如下函数,以及路由,后续各种操作在此路由下实现:

//方法
public function index(){
    return 'index';
}

//路由
Route::get('db/index', 'DataController@form');

并测试是否路由成功。

至此,数据库的基本配置完成。

其次,可以在idea开发工具中添加数据库的连接,防止在编写SQL的时候,造成SQL语句报错。

4. 数据库操作 - 图2

连接的时候,可能会报时区错误,修改如下:

4. 数据库操作 - 图3

4.2 三种常用查询方式

Laravel框架支持原生、查询构造器和Eloquent ORM(关系型对象映射器)来操作数据库。

1. 原生SQL

在上面创建的 index 方法中写入如下内容:

    public function index(){

        $user = DB::select('select * from laravel_users');
        return $user;
    }

这时,查询会返回所有的 用户数组user ,最终返回给路由的是JSON格式:

4. 数据库操作 - 图4

2. 构造器查询

格式如下:

    public function index(){
        $user = DB::table('laravel_users')->find(24);
        return response()->json($user);
    }

查询结果:

4. 数据库操作 - 图5

这里注意,返回结果不同于原生SQL查询的返回结果。

find() 方法返回的是对象,而路由要求返回的结果是数组。所以需要进行 response 转换。
此外,返回结果还可以直接用数组转换,格式:

    public function index(){
        $user = DB::table('laravel_users')->find(25);
        return [$user];
    }

查询结果:

4. 数据库操作 - 图6

对比一下,第二种方法多了一个数组的括号。

另外,这种查询方式中的 table() 中的参数是表名。

对于有前缀的表名,可以在 database.php 中配置前缀

4. 数据库操作 - 图7

然后 table() 方法只需要写表的后缀即可。

 $user = DB::table('users')->find(25);

3. 使用模型

所谓模型,是将表和模型进行绑定的

模型的创建方法:

php artisan make:model Http/Models/User

这里注意,如果是新版本的Laravel,会默认在app文件下,存在一个Models文件夹,并且里边有一个初始的User.php的模型,该模型是中间件权限控制的。

如果继续使用上面的命令,则会在Models文件夹下新建一系列文件。

所以应该使用下面的命令:

php artisan make:model Models/User

然后修改控制类中的方法为:

    public function index(){
        $user = User::all();
        return $user;
    }

这时,执行结果为:

4. 数据库操作 - 图8

也是个数组。

这里注意,如果你的数据库表名是单数形式,比如:user,再次执行,会提示找不到该表:

4. 数据库操作 - 图9

这是因为模型编码规范要求数据表是复数,这里的复数并不是单纯加s,还有es,或者其他复数的变体。

可以使用字符串助手: Str::plural() 来判断英文单词的复数情况:

return Str::plural('bus'); //buses
return Str::plural('user'); //users
return Str::plural('child'); //children

所以,这里有两种解决方案,一种是根据复数形式修改数据库表名,另一种是在前面创建的User模型中增加以下代码:

protected $table = 'user';

即:

class User extends Model
{
    use HasFactory;
    protected $table = 'user';
}

这时,再执行,便不会出错。

注意,如果数据库的表名是多段式,比如用户角色表名为:laravel_role_users,则可以将前缀 laravel_ 配置在 database.php 里,然后创建模型的名字为:RoleUser,即可。

以上是数据库的基本操作。