我的Laravel学习之路之Eloquent 入门

来源:互联网 发布:韦东山嵌入式linux 编辑:程序博客网 时间:2024/05/01 08:53

Laravel 的 Eloquent ORM 提供了漂亮、简洁的 ActiveRecord 实现来和数据库进行交互。每个数据库表都有一个对应的「模型」可用来跟数据表进行交互。你可以通过模型查询数据表内的数据,以及将记录添加到数据表中。

中文文档:http://d.laravel-china.org/docs/5.5/eloquent

我们通过php artisan 可以查看到有一个命令叫做  make:model        // Create a new Eloquent model class

本章主要讲述Eloquent的基本用法

上一节我们通过migration 创了了samples表

现在我们通过php artisan make:model Samples //来创建Samples模型

创建成功后,我们可以在laravel/app的目录下产生一个Samples和Users一样存在的php的文件

如何使用呢:

第一:

假如我们定一个一个模型类Flight,并且它对应了数据库中的flight表,(如果需要指定表情使用protected $table = 'my_flights';)

完毕后可以通过以下方式来实例化
比如你可以$samples = new App\Samples;来获取一个新对象,然后使用$samples来进行操作
// 通过主键取回一个模型...

$flight = App\Flight::find(1);
// 取回符合查询限制的第一个模型 ...
$flight = App\Flight::where('active', 1)->first();

第二:模拟

我们通过php artisan tinker命令来进入一个命令行交互界面,操作过memcahe和redis以及linux下mysql命令界面的都会比较熟悉了,

在模型samples表中有以下字段:id,created_at,updated_at,intro.

如何使用呢,我么通过$samples = new App\Samples;然后$samples->intro = 'xxx';然后执行$samples->save();

当你看到返回一个true时,那么恭喜你插入数据已经成功.id和创建时间及更新时间字段laravel都会自动生成!

Laravel够强大吧!

小技巧,如果你要获取当前时间,你可以使用laravel自带的一个类 

可以use Carbon\Carbon; 然后使用$new = Carbon::now();  
当然如果不引入,也可以直接使用:$now = Carbon\Carbon::now();



心得:请注意,创建模型类以后,在控制器中:

use App\Samples; 引入 然后$samples = new Samples;

虽然我们在配置中已经定义了ASSOC数据库查询返回数组格式,但是经过实践发现

使用$samples::get() 以及all()  或者find()  等都是返回的对象,除非你在后面->toArray()转为数组

否则遍历的时候请注意是使用->还是[]方式获取.

如果使用填充的话:$samples->create(['inrto'=>'aaa'])会报一个Mass-Assignment漏洞错误

这时我么需要在模型中protected $fillable = ['name'];多个字段使用,分开即可,代表允许赋值的字段.

注意修改之后,如果使用的是php artisan tinker命令,需要退出重新进入

$guarded=['name']代表禁止赋值的黑名单.

这是5.5的用法,当然,如果你允许所有所有字段可以赋值,可设置为protected $guarded = [];为空


Eloquent 也会假设每个数据表都有一个叫做 id 的主键字段。你也可以定义一个 $primaryKey 属性来重写这个约定。
此外,Eloquent 假定主键是一个递增的整数值,这意味着在默认情况下主键将自动的被强制转换为 int。 如果你想使用非递增或者非数字的主键,你必须在你的模型 public $incrementing 属性设置为false。
时间戳#
默认情况下,Eloquent 会认为在你的数据库表有 created_at 和 updated_at 字段。如果你不希望让 Eloquent 来自动维护这两个字段,可在模型内将 $timestamps 属性设置为 false: