Laravel 自带的 Eloquent ORM 提供了一个美观、简单的与数据库打交道的 ActiveRecord 实现,每张数据表都对应一个与该表进行交互的“Model模型”,模型允许你在表中进行数据查询,以及插入、更新、删除等操作。
每个数据表 与数据表进行交互的Model模型映射(实例化模型) 记录中的字段 与模型类的属性映射(给属性赋值) 表中的每个记录 与一个完整的请求实例映射(具体的CURD操作)
定义模型的位置,默认是在app目录下面,但是为了管理方便,建议分目录进行创建:
本身laravel对模型的命名没有严格的要求,一般采用 表名(首字母大写).php 比如:Member.php User.php Goods.php
可以使用artisan命令;
[project] > php artisan make:model Home/Member创建好的初始代码:
第一:(必做)定义一个table属性,值是不要前缀的表名,如果不指定则使用类名的复数形式作为表名。如果模型为Member模型在不指定table属性的情况下,其默认会去找members表。修饰词:protected 第二:(可选)定义primaryKey属性,值是主键名称,如果需要使AR模式的find方法,则可能需要指定主键(Model::find(n)),在主键字段不是id的时候则需要指定主键。修饰词:protected 第三: (可选)定义timestamps属性,值是false,如果不设置为false,则默认会操作表中的created_at和updated_at字段,我们表中一般没有这两个字段,所以设置为false,表示不要操作这两个字段。修饰词:public 第四:(可选)定义 fillable属性,表示使用模型插入数据时,允许插入到数据库的字段信息。修饰词:protected
注意:使用模型中create插入数据时,要设置 fillable允许入库的字段,使用guarded是设置排除入库的字段。
引入Member模型类;
模型的使用:模型在控制器中的使用方式有2种 ①直接像使用DB门面一样的操作方式:以调用静态方法为主的形式,该形式下模型不需要实例化,
例如:Member::get() 等价于 DB::table(‘member’) -> get();②实例化模型然后再去使用模型类(普通)
例如:$model = new Member();$model -> get();路由可以使用路由群组的方式进行定义。
在laravel里面完成数据的添加可以使用两种方式: 方式一(AR模式):使用AR模式必须要实例化模型 注意:在laravel里面添加数据的时候,需要先实例化模型,然后为模型设置属性,最后调用save方法即可。
$member = new Member(); //映射关系1:将表映射到模型 $member-> name = value; //映射关系2:将字段映射到属性,属性名和字段名一致 $member -> age = value; … $member -> save(); //映射关系3:将记录映射到实例如果模型中不去关联数据表,则会报以下的错误:
上面的这种方法可以完成数据的插入,但是不建议使用。我们可以使用laravel提供的更高级的操作。
方式二: 建立简易表单,表单中有姓名、年龄、邮箱的字段,要求能够提交
首先,在控制器文件引入Request这个类
use Illuminate\Http\Request;Request类的使用: ①对象传递 ②request语法(与input门面有点类似,方法名一致,但是input调用的是静态方法,而当前的不是)
$request->all() $request->input('name'); $request->only([‘name1’,’name2’…]) $request->except([‘name1’,’name2’…]) $request->has(‘name’) $request->get(‘name’) //添加操作代码语法如下; Member::create($request->all())//返回值是一个对象注意:如果使用create方法,则需要在模型中定义fillable属性,允许写入字段的定义,如果没有时间相关字段也需要禁用时间自动更新功能: 执行的结果:
案例:测试在all方法之前,写一些辅助方法实现连贯操作
注意:在laravel里面如果需要更新数据(ORM模型方式),需要先调用模型的find方法获取对应的记录,返回一个模型对象,然后为该模型对象设置要更新的数据(对象的属性),最后调用save方法即可。 例如:
$user = User::find($id); $user->title = $_POST['title']; $user->content= $_POST['content']; return $user->save() ? 'OK' : 'fail';案例:实现ORM形式模型的修改操作。修改为7 的用户的邮箱地址为admin@itcast.cn
$user=User::find(7); $user->email="admin@itcast.cn"; $result=$user->save();问题:能不能用模型去update呢? 答:可以使用update方法进行更新,也可以使用AR模式的方式进行更新。
注意:在laravel里面如果要删除数据,如果需要使用AR模式删除数据必须先根据主键id查询对应的记录,返回一个模型对象,然后调用模型对象的delete方法即可。 例如代码:
$user = User::find($id); return $user->delete() ? 'ok' : 'fail';案例:使用AR模式删除id为7的记录
$user=User::find(7); $result=$user->delete();问题:DB里面的删除方式能否在模型中使用?【可以】