Laravel框架05:模型和自动验证

一、模型(AR模式)概述

  • Laravel自带的 Eloquent ORM 提供了一个美观、简单的与数据库打交道的ActiveRecord实现。
  • 每张数据表都对应一个与该表进行交互的 ”Model“ 模型,允许在模型中对表中的数据进行CURD操作。
  • AR模式三个核心(映射关系):
    1. 每个数据表:与数据表进行交互的Model模型(实例化模型)
    2. 记录中的字段:与模型类的属性(给属性赋值)
    3. 表中的每个记录:与一个完整的请求实例(具体的CURD操作)

二、定义模型

  • 默认定义在app目录下,建议分目录管理。
  • 命名规则:表名(首字母大写).php
  • 创建模型:php .\artisan make:model Home/Member
  • 注意事项:
    1. 必做:定义一个$table属性,值是不要前缀的表名。(如果不指定则使用类名的复数形式)
    2. 定义$primaryKey属性,如果需要使用AR模式的find(Model::find(n))方法,且主键字段不是id则需要指定主键。
    3. 定义$timestamps属性,值设置为false。如果不设置,默认会操作表中的created_at和updated_at字段。
    4. 定义$fillable属性,表示使用模型插入数据时,允许插入到数据库的字段信息。定义$guarded设置排除入库字段。
    class Member extends Model
    {
          
          
        protected $table = 'member';
        protected $primaryKey = "id";
        public $timestamps = false;
        protected $fillable = ["id", "name", "age", "email"];
    }
    

三、调用模型

  • 引入 Member 模型类:use App\Home\Member;
  • 使用方式:
    1. 以调用静态方法为主的形式,该形式下模型不需要实例化。Member::get()
    2. 实例化模型,再去使用。
    $model = new Member();
    $model->get();
    

四、基本操作

1. 添加数据

① AR模式

  • AR模式必须要实例化模型
  • 然后为模型设置属性,最后调用save() 即可。
$member = new Member();
$member->name = "Lisa";
$member->age = 15;
$result = $member->save();
dd($result);  // boolean

② Request

  • 引入 Request
public function test8(Request $request) {
    
    
	...
}
# 获取所有参数
$request->all();

# 获取某个参数
$request->get('name');

# 只获取某些参数
$request->only(['name', 'age']);

# 不获取某些参数
$request->except(['name', 'age']);
  • 添加数据
public function test8(Request $request) {
    
    
    $member = new Member();
    $result = $member->create($request->all());
}
  • 如果使用 create 方法,则需要在模型中定义 fillable 属性,允许写入字段的定义,如果没有时间相关字段也需要禁止时间自动更新功能。

2. 查询数据

  • 获取指定主键的一条数据
$data = Member::find(5);

结果集默认是一个对象。如果要将结果集转换为数组,则需要在最终添加框架自己封装的方法toArray()

public function test9() {
    
    
    $data = Member::find(5)->toArray();
    dd($data);
}
  • 查询符合指定条件的第一条记录。
$data = Member::where("id", ">", 5)->first();
  • 查询多行并且指定字段
    • select()->get():按条件查询多个字段。
    • all() :功能和上面一样。但不支持链式操作,比如排序、分组。
$data = Member::where("id", ">", 5)->select(["name", "age"])->get()->toArray();

在这里插入图片描述

3. 修改操作

① AR模式

  • 如果要更新数据,需要先调用 find() 返回一个模型对象,然后再为对象更新数据。
public function test10() {
    
    
    $data = Member::find(7);
    $data->email = "[email protected]";
    $data->save();
}

② update

Member::where("id", "8")->update([
    "age" => 80
]);

4. 删除操作

$data = Member::find(10);
$data->delete();

五、控制器验证

  • 建议去查看手册

1. 基本语法

  • validate 方法用于验证接收的数据。如果验证通过,代码继续执行。验证失败,则抛出异常。在传统的HTTP请求中,验证失败会生成一个重定向响应。
  • 多个规则使用|隔开
$this->validate($request, [
    "name" => "required|unique:member|max:16",
    "age" => "required|integer|min:1|max:120",
    "email" => "required|email"
]);

2. 输出错误信息

  • 每次请求的所有视图中都存在一个 $errors 变量。
foreach ($errors->all() as $error){
    
    
	echo $error;
}
composer require caouecs/laravel-lang
  • 使用
    语言包文件在 vendor/caouecs/laravel-lang/src 中,将语言目录复制到 resources/lang 目录下。在 config/app.php 中修改 locale 的值。

猜你喜欢

转载自blog.csdn.net/realoser/article/details/129239645