模型操作 (AR模式)
Laravel 内置的 Eloquent ORM 提供了一个美观、简单的与数据库打交道的 ActiveRecord 实现,每张数据表都对应一个与该表进行交互的模型(Model),通过模型类,你可以对数据表进行查询、插入、更新、删除等操作。
AR模式的三个核心
| 数据库部分 | 对应Php部分 |
|---|---|
| 数据表 | 与数据表进行交互的Model模型映射 (实例化模型) |
| 表中的字段 | 与模型类的属性映射 (给属性赋值) |
| 表中的每条记录 | 与一个完整的请求实例映射 (具体的CURD操作) |
模型定义
- 模型默认是定义在
app目录下, 为了方便管理, 建议分目录进行创建 - 本身 laravel 对模型的命名没有严格的要求, 一般采用
表名(首字母大写).php, 比如 Member.php, User.php等创建模型
要创建模型文件,可以使用artisan命令提供的make:model方法。生成文件包含模版代码。// Models/Category 表示生成文件的保存路径, 默认基于 app 目录// 对应在 app/Models/ 目录下生成 Category.php 文件php artisan make:model Models/Category
定义模型的注意事项
- 定义一个
$table属性,值是不要前缀的表名。修饰词:protected
如果不指定, 则使用类名的复数形式作为表名 - (可选) 定义
$primaryKey属性,值是主键名称。修饰词:protected
如果使用AR模式的find方法 (Model::find()), 且主键字段不是id的时候, 需要指定主键 - (可选) 定义
$timestamps属性。值为false,默认为true,修饰词:public
默认会操作表中的created_at和updated_at字段, 设置为false表示不要操作这两个字段 - (可选) 定义
$fillable属性。修饰词:protected
表示使用模型插入数据时, 允许插入到数据库的字段信息, 如允许修改name, age, email - 若操作没有被允许的字段, 可能报如下错误信息, 也可能不报错, 但相应字段的数据没有插入成功

示例代码
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'];
}
模型在控制器中的使用
引入模型类, 以
App\Home目录下的Member.php为例use App\Home\Member;模型的使用 (有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());
}
}
