Eloquent ORM是对象关系映射,是用来与数据库里面数据进行交互的。每一个数据库里面的表,都有一个对应的模型,我们可以利用模型定义一些属于这个模型对象拥有的一些方法。那么属于这个对象的都可以使用里面方法。那么,如何创建一个模型呢?
创建模型实例的最简单方法是使用 make:model
Artisan 命令:
php artisan make:model User
当你生成一个模型时想要顺便生成一个 数据库迁移,可以使用 --migration
或 -m
选项:
php artisan make:model User --migration
php artisan make:model User -m
一般情况下,数据表明确地指定了其它名称,否则将使用类的「蛇形名称」、复数形式名称来作为数据表的名称。也可以指定关联的表名字, protected $table = 'users',一旦模型关联了数据表。就可以从数据库中获取数据。
比如以下的一行代码,
use App\User;
$users = User::orderBy('id', 'desc')->paginate(24);
默认情况下 Eloquent 返回的都是一个 Illuminate\Database\Eloquent\Collection
对象的实例,包括通过 get
方法检索或通过访问关联关系获取到的结果。Eloquent 的集合对象继承了 Laravel 的集合基类(https://d.laravel-china.org/docs/5.5/collections),因此它自然也继承了数十种能优雅地处理 Eloquent 模型底层数组的方法。由于每个 Eloquent 模型都可以当作一个查询构造器(Laravel 的数据库查询构造器提供了一个方便、流畅的接口,用来创建及运行数据库查询语句。它能用来执行应用程序中的大部分数据库操作,且能在所有被支持的数据库系统中使用。Laravel 的查询构造器使用 PDO 参数绑定,来保护你的应用程序免受 SQL 注入的攻击。在绑定传入字符串前不需要清理它们。),所以你可以在查询中增加规则,然后使用 get
方法来获取结果。
创建模型实例:
要在数据库中创建一条新记录,只需创建一个新模型实例,并在模型上设置属性和调用 save
方法即可:当 save
方法被调用时,created_at
以及 updated_at
时间戳将会被自动设置,因此我们不需要去手动设置它们。使用 create
方法通过一行代码来保存一个新模型。被插入数据库的模型实例将会返回给你。不过,在这样做之前,你需要先在你的模型上定义一个 fillable
(白名单)或 guarded
(黑名单)属性,因为所有的 Eloquent 模型都针对批量赋值(Mass-Assignment)做了保护。当用户通过 HTTP 请求传入了非预期的参数,并借助这些参数更改了数据库中你并不打算要更改的字段,这时就会出现批量赋值(Mass-Assignment)漏洞。例如,恶意用户可能会通过 HTTP 请求发送 is_admin
参数,然后对应到你模型的 create
方法,此操作能让该用户把自己升级为一个管理者。所以,在开始之前,你应该定义好哪些模型属性是可以被批量赋值的。你可以在模型上使用 $fillable
属性来实现。当用户通过 HTTP 请求传入了非预期的参数,并借助这些参数更改了数据库中你并不打算要更改的字段,这时就会出现批量赋值(Mass-Assignment)漏洞。例如,恶意用户可能会通过 HTTP 请求发送 is_admin
参数,然后对应到你模型的 create
方法,此操作能让该用户把自己升级为一个管理者。