laravel

laravel模型Eloquent介绍

日期:2017-03-01 阅读:1588

dmandwp系统 - wordpress系统和DM系统区块建站>>


进入网易云课堂播放
    |    更多视频教程>

https://laravel-china.org/docs/5.4/eloquent 

  
1  Eloquent 模型约定

数据表名称 
 protected $table = 'my_flights';  //没有,则用复数。
 
时间戳   
Eloquent 会认为在你的数据库表有 created_at 和 updated_at 字段。
如果你不希望让 Eloquent 来自动维护这两个字段,可在模型内将 $timestamps 属性设置为 false:
public $timestamps = false;
 
=======================================================
2 取回多个模型 

可把每个 Eloquent 模型想像成强大的 查询构造器 - https://laravel-china.org/docs/5.4/queries

用法:  all
<?php

use App\Flight;

$flights = App\Flight::all();

foreach ($flights as $flight) {
    echo $flight->name;
}
-----------
增加额外的限制
$flights = App\Flight::where('active', 1)
               ->orderBy('name', 'desc')
               ->take(10)
               ->get();
----------               
约定:
由于 Eloquent 模型是查询构造器,因此你应当去阅读所有 查询构造器 中可用的方法。
你可在 Eloquent 查询中使用这其中的任何方法。
https://laravel-china.org/docs/5.4/queries

-------------
集合
https://laravel-china.org/docs/5.4/eloquent-collections#available-methods

集合方法的详解:
https://laravel-china.org/docs/5.4/collections

$flights = $flights->reject(function ($flight) {
    return $flight->cancelled;  // $flight->cancelled是一个布尔值。如果为true,则reject。与之相反的是filter
});

https://laravel-china.org/docs/5.4/collections#method-reject

然后再遍历数组:
foreach ($flights as $flight) {
    echo $flight->name;
}
------------

分块结果
如果你需要处理数以千计的 Eloquent 查找结果,则可以使用 chunk 命令
---- 不讲,不适合入门。

====================

3  取回单个模型/集合#

可以通过 find 和 first 方法来取回单条记录
// 通过主键取回一个模型...
$flight = App\Flight::find(1);

// 取回符合查询限制的第一个模型 ...
$flight = App\Flight::where('active', 1)->first();
你也可以用主键的集合为参数调用find方法,它将返回符合条件的集合:

$flights = App\Flight::find([1, 2, 3]);

----------
「未找到」异常#

有时候你可能希望在找不到模型时抛出一个异常,这在路由或是控制器内特别有用。
findOrFail 以及 firstOrFail 方法

==================

4 添加和更新模型#

基本添加#
要在数据库中创建一条新记录,只需创建一个新模型实例,
并在模型上设置属性和调用 save 方法即可:
当 save 方法被调用时,created_at 以及 updated_at 时间戳将会被自动设置,因此我们不需要去手动设置它们
  public function store(Request $request)
    {
        // 验证请求...

        $flight = new Flight;

        $flight->name = $request->name;

        $flight->save();
    }
-------------------
基本更新#
save 方法也可以用于更新数据库中已经存在的模型
$flight = App\Flight::find(1);

$flight->name = 'New Flight Name';

$flight->save();
-----------------
批量更新 
update 方法会期望收到一个含有字段与值对应的数组,而这些字段的内容将会被更新。

当通过“Eloquent”批量更新时,saved和updated模型事件将不会被更新后的模型代替。这是因为批量更新时,模型从来没有被取回。

--------------------

批量赋值#
你也可以使用 create 方法通过一行代码来保存一个新模型
不过,在这样做之前,你需要先在你的模型上定义一个 fillable 或 guarded 属性
---------

 protected $fillable = ['name']; //fillable 表示 可以被批量赋值 ,就好比白名单
 
 protected $guarded = ['price'];  //guarded是用来保护的,就是不让赋值。  就好比黑名单
 
 如果你想让所有的属性都可以被批量赋值,你应该定义 $guarded为空数组。
protected $guarded = [];

 
 -------------
一旦我们已经设置好可以被批量赋值的属性,便能通过 create 方法来添加一条新记录到数据库。create 方法将返回已经被保存的模型实例:

$flight = App\Flight::create(['name' => 'Flight 10']);
-------------------

5 删除模型#
要删除模型,必须在模型实例上调用 delete 方法:

$flight = App\Flight::find(1);

$flight->delete();
------------

<<点击返回