对laravel框架中的Eloquent model的一点认识

Eloquent ORM是对象关系映射,是用来与数据库里面数据进行交互的。每一个数据库里面的表,都有一个对应的模型,我们可以利用模型定义一些属于这个模型对象拥有的一些方法。那么属于这个对象的都可以使用里面方法。那么,如何创建一个模型呢?

创建模型实例的最简单方法是使用 make:model

命令为:

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 方法,此操作能让该用户把自己升级为一个管理者。

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容