1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > laravel的Eloquent模型

laravel的Eloquent模型

时间:2022-04-24 18:39:00

相关推荐

laravel的Eloquent模型

光看一遍手册,都记不住,做点笔记,加深印象

1.默认的Eloquent模型,存放在app目录下,这点不是特别好,建议在app中,创建一个 “Model”,专门存放模型文件。

手册中提到:可以将它们放在任何可通过composer.json字段加载的地方,但是还不清楚如果配置,暂留!

2.创建模型实例:

php artisan make:model User [-m | --migration] // 使用 -m|--migration选项,创建模型同时,生成 "数据库迁移"

3.模型的几个约定得了解下:

1>模型类对应的数据表

默认使用类的 “蛇形名称”&“复数形式” 对应数据表名称。例如:User类对应的数据表就是:users。UserOrder类应该对应的数据表是:user_orders

可以在模型类中,通过 $table 属性,明确指定对应的数据表

protected $table = 'my_users';

2>主键

Eloquent会假设每个数据表都有一个 "id" 的主键字段。

可以通过 $primaryKey 属性,重新定义主键字段

3>时间戳

默认情况下,Eloquent预计数据表中有 "created_at" & "updated_at" 字段。

不希望Eloquent字段维护这2个字段,可设置:$timestamps = false

public $timestamp = false;

需要自定义时间戳格式,可在模型内设置 $dateFormat 属性(决定了日期如何在数据库中存储,以及当模型被序列化成数组或JSON时的格式)

protected $dateFormat = 'U';

4>数据库连接

默认,所有的Eloquent模型,使用应用程序中默认的数据库连接设置。如果香味模型指定不同的链接,可设置 $connect 属性

protect $connection = 'connection1'; // 此连接名称,可切换链接

4.在控制器中使用:

use APP\User; // 当我们将Eloquent模型放置在app/Model,应该是:use App\Model\User;

5.获取模型

1>取回多个模型

1)User::all(); // 返回模型数据表中的所有结果

2)每个Eloquent模型都可以看作是一个 "查询构造器",所以可以使用组装提交语句。

App\User::where()->orderBy()->take()->get(); // 这种结构

3)通过all()、get()等方法,可以取回多条结果的Eloquent方法,都会返回 ”Illmminate\Database\Eloquent\Collection“的实例。可以通过 "Collection" 提供的集合函数来处理结果!

2>取回单个模型

可使用find()、first()方法,来取回单条记录,不是 "Collection" 集合。

3>未找到,抛出异常(并非是未找到记录,就一定会抛出异常。这里的场景是:我们希望未找到结果时,抛出异常)

使用:findOrFail()、firstOrFail(),找不到结果时,会抛出一个 "Illmminate\Database\Eloquent\ModelNotFoundException" 的异常

6.添加和更新模型

1>添加

要在数据库中,创建一条新纪录,只需创建一个新模型实例,并在模型上设置属性&调用save()方法。

$user = new User;

$user->name = 'dongxuemin';

$user->save();

2>更新

1)使用save()方法更新,需要先获取模型,再设置更新的属性&调用save()方法

$user = App\User::find(1);

$user->name = 'yangwei';

$user->save();

2)也可以针对符合指定条件的任意数量模型进行更新。

App\User::where('active', 1)->update(['delayed' => 1]);

7.批量赋值

1>所有的Eloquent模型,都有针对批量赋值(Mass-Assignment)做保护,我们在定义模型时,得指定 $fillable&$guarded 属性中的一个(只能是其中一个)

$fillable - 可批量赋值的属性(白名单)

$guarded - 不可批量赋值的属性(黑名单)

2>一旦设置了属性,就可以通过create()方法,添加一条记录到数据表

$user = App\User::create(['name' => 'name1']); // 这样就插入了一条记录

3>firstOrCreate(['name' => 'name1']),先通过传入的 “字段/值” 组合,查找数据库中的记录,没有则会添加一条记录。

4>firstOrNew(['name' => 'name1']),先通过传入的 “字段/值” 组合,查找数据库中的记录,没有则会 ”返回一个新的模型实例“,得通过 save() 方法,来插入到数据库!

8.删除模型

使用delete()方法,也可使用destroy([1, 2, 3])方法(通过主键id来删除)

9.软删除

1>当模型被软删除时,并不会真的从数据库中被移除,而是会在模型上设置一个 ”deleted_at“ 属性,并将其添加到数据库。要在模型上启动软删除,必须在模型上使用 "Illmminate\Database\Eloquent\SoftDeletes" ,并添加 "deleted_at" 字段到 model 的 $dates 属性上。

useIllmminate\Database\Eloquent\SoftDeletes;

protected $dates = ['deleted_at'];

2>数据表中,也必须添加 'deleted_at' 字段

Schema::table('users', function ($table) {

$table->softDeletes();

}

3>当在模型上调用delete()方法,deleted_at字段,将会被设置成目前的时间。

4>确认指定的模型,是否已经被软删除,可调用:trashed() 方法

if ($user->trashed()) { echo '当前模型被软删除'; } // $user为查询的模型数据

10.软删除的相关查找

1>默认查找时,软删除的数据会被排除,不包含软删除的记录

2>希望查找数据,包含软删除数据,使用:

withTrashed()->get() 方法

3>只获取软删除的模型,使用:

onlyTrashed()->get() 方法

11.恢复软删除模型

使用:restore() 方法

12.永久的删除

使用:forceDelete() 方法

13.查找范围

1>全局作用域(Global Scopes)可定义一个有限制的集合,可在程序中反复被调用,就是缩小个查询范围,提前定义了一些频繁的查询。使用方法:在model类中定义一些以 "scope" 为前缀的方法:

public function scopeActive($query) {

return $query->where('active', 1);

}

2>利用查找范围:

App\User::active()->orderBy()->get(); // 就可以直接调用了

3>也允许传递参数的方法:

public function scopeOfType($query, $type) {

return $query->where('type', $type);

}

14.事件,Eloquent模型会触发许多事件,可以对事件进行监控。可查看手册api!不清楚这里讲的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。