模型操作 (AR模式)

Laravel 内置的 Eloquent ORM 提供了一个美观、简单的与数据库打交道的 ActiveRecord 实现,每张数据表都对应一个与该表进行交互的模型(Model),通过模型类,你可以对数据表进行查询、插入、更新、删除等操作。

AR模式的三个核心

数据库部分 对应Php部分
数据表 与数据表进行交互的Model模型映射 (实例化模型)
表中的字段 与模型类的属性映射 (给属性赋值)
表中的每条记录 与一个完整的请求实例映射 (具体的CURD操作)

模型定义

  • 模型默认是定义在 app 目录下, 为了方便管理, 建议分目录进行创建
  • 本身 laravel 对模型的命名没有严格的要求, 一般采用 表名(首字母大写).php , 比如 Member.php, User.php等

    创建模型

    要创建模型文件,可以使用 artisan 命令提供的 make:model 方法。生成文件包含模版代码。
    1. // Models/Category 表示生成文件的保存路径, 默认基于 app 目录
    2. // 对应在 app/Models/ 目录下生成 Category.php 文件
    3. php artisan make:model Models/Category

    定义模型的注意事项

  1. 定义一个 $table 属性,值是不要前缀的表名。修饰词: protected
    如果不指定, 则使用类名的复数形式作为表名
  2. (可选) 定义 $primaryKey 属性,值是主键名称。修饰词: protected
    如果使用AR模式的find方法 ( Model::find() ), 且主键字段不是id的时候, 需要指定主键
  3. (可选) 定义 $timestamps 属性。值为 false,默认为 true,修饰词: public
    默认会操作表中的 created_atupdated_at 字段, 设置为 false 表示不要操作这两个字段
  4. (可选) 定义 $fillable 属性。修饰词: protected
    表示使用模型插入数据时, 允许插入到数据库的字段信息, 如允许修改name, age, email
  5. 若操作没有被允许的字段, 可能报如下错误信息, 也可能不报错, 但相应字段的数据没有插入成功

model_fillable_error.jpg

示例代码

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Category extends Model {

    protected $table = 'mt_category';
    protected $primaryKey = 'cat_id';
    public $timestamps = false;
    protected $fillable = ['cat_name', 'parent_id', 'cat_desc', 'sort_order', 'unit', 'is_show'];
}

模型在控制器中的使用

  1. 引入模型类, 以 App\Home 目录下的 Member.php 为例

    use App\Home\Member;
    
  2. 模型的使用 (有2种方式)

    • 以静态方法的形式调用

      // 等价于 DB::table('member') -> get();
      Member::get()
      
    • 以实例方法的形式调用

      $member = new Member();
      $member -> get();
      

示例代码

namespace App\Http\Controllers\Home;

use App\Models\Category;

class ModelDemoController {

    public function getData() {
//        dd(Category::get());

        $category = new Category();
        dd($category -> get());
    }

}