关于拾年之璐


微信公众号知行校园汇,点击查看,欢迎关注


本文主要内容:


4.1 配置数据库

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

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

【Laravel笔记】4. 数据库操作_laravel

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

php artisan make:controller DataController

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

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

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

并测试是否路由成功。

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

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

【Laravel笔记】4. 数据库操作_laravel_02

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

【Laravel笔记】4. 数据库操作_php_03

4.2 三种常用查询方式

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

1. 原生SQL

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

public function index(){

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

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

【Laravel笔记】4. 数据库操作_Laravel_04

2. 构造器查询

格式如下:

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

查询结果:

【Laravel笔记】4. 数据库操作_php_05

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

​find()​​​ 方法返回的是对象,而路由要求返回的结果是数组。所以需要进行 ​​response​​ 转换。

此外,返回结果还可以直接用数组转换,格式:

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

查询结果:

【Laravel笔记】4. 数据库操作_php_06

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

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

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

【Laravel笔记】4. 数据库操作_laravel_07

然后 ​​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;
}

这时,执行结果为:

【Laravel笔记】4. 数据库操作_php_08

也是个数组。

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

【Laravel笔记】4. 数据库操作_数据库_09

这是因为模型编码规范要求数据表是复数,这里的复数并不是单纯加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​​,即可。


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