正文 【Laravel基础】4. 数据库操作 拾年之璐 V管理员 /2021年 /310 阅读 0204 ## 4. 数据库操作 [TOC] ### 4.1 配置数据库 数据库的配置在 `config/database.php`,如果是本地可以直接配置 `.env` 文件。 我们通过 `.env` 文件配置数据库连接的相关信息,以提供给 `database` 读取。如下所示:  然后新建一个链接数据库的控制器 `DataController` ,来模拟链接数据库的各种操作: ```PHP php artisan make:controller DataController ``` 添加如下函数,以及路由,后续各种操作在此路由下实现: ```PHP //方法 public function index(){ return 'index'; } //路由 Route::get('db/index', 'DataController@form'); ``` 并测试是否路由成功。 至此,数据库的基本配置完成。 其次,可以在idea开发工具中添加数据库的连接,防止在编写SQL的时候,造成SQL语句报错。  连接的时候,可能会报`时区错误`,修改如下:  ### 4.2 三种常用查询方式 Laravel框架支持`原生、查询构造器和Eloquent ORM(关系型对象映射器)`来操作数据库。 #### 1. 原生SQL 在上面创建的 `index` 方法中写入如下内容: ```php public function index(){ $user = DB::select('select * from laravel_users'); return $user; } ``` 这时,查询会返回所有的 `用户数组user` ,最终返回给路由的是JSON格式:  #### 2. 构造器查询 格式如下: ```php public function index(){ $user = DB::table('laravel_users')->find(24); return response()->json($user); } ``` 查询结果:  这里注意,返回结果不同于原生SQL查询的返回结果。 `find()` 方法返回的是对象,而路由要求返回的结果是数组。所以需要进行 `response` 转换。 此外,返回结果还可以直接用数组转换,格式: ```php public function index(){ $user = DB::table('laravel_users')->find(25); return [$user]; } ``` 查询结果:  对比一下,第二种方法多了一个数组的括号。 另外,这种查询方式中的 `table()` 中的参数是表名。 对于有前缀的表名,可以在 `database.php` 中配置前缀  然后 `table()` 方法只需要写表的后缀即可。 ```php $user = DB::table('users')->find(25); ``` #### 3. 使用模型 所谓模型,是将表和模型进行绑定的 模型的创建方法: ```php php artisan make:model Http/Models/User ``` 这里注意,如果是新版本的Laravel,会默认在app文件下,存在一个Models文件夹,并且里边有一个初始的User.php的模型,该模型是中间件权限控制的。 如果继续使用上面的命令,则会在Models文件夹下新建一系列文件。 所以应该使用下面的命令: ```php php artisan make:model Models/User ``` 然后修改控制类中的方法为: ```php public function index(){ $user = User::all(); return $user; } ``` 这时,执行结果为:  也是个数组。 这里注意,如果你的数据库表名是单数形式,比如:user,再次执行,会提示找不到该表:  这是因为模型编码规范要求数据表是复数,这里的复数并不是单纯加s,还有es,或者其他复数的变体。 可以使用字符串助手: `Str::plural()` 来判断英文单词的复数情况: ```php return Str::plural('bus'); //buses return Str::plural('user'); //users return Str::plural('child'); //children ``` 所以,这里有两种解决方案,一种是根据复数形式`修改数据库表名`,另一种是在前面创建的User模型中增加以下代码: ```php protected $table = 'user'; ``` 即: ```php class User extends Model { use HasFactory; protected $table = 'user'; } ``` 这时,再执行,便不会出错。 > 注意,如果数据库的表名是多段式,比如用户角色表名为:`laravel_role_users`,则可以将前缀 `laravel_` 配置在 `database.php` 里,然后创建模型的名字为:`RoleUser`,即可。 以上是数据库的基本操作。 本文采用创作共用版权 CC BY-NC-SA 3.0 CN 许可协议,转载或复制请注明出处! -- 展开阅读全文 --